Объединение множеств
Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 22 из 65.
Когда у вас есть две отдельные коллекции Set, вы можете объединить их в один набор, содержащий все уникальные элементы из обоих, используя метод union(). Эта операция создает новый набор, который включает в себя каждый элемент, присутствующий в любом из исходных наборов.
Метод union() автоматически обрабатывает дубликаты за вас. Если один и тот же элемент существует в обоих множествах, он появится в результирующем объединенном множестве только один раз, сохраняя фундаментальное свойство множеств — содержать только уникальные значения.
Set<String> frontendSkills = {'HTML', 'CSS', 'JavaScript'};
Set<String> backendSkills = {'JavaScript', 'Python', 'SQL'};
Set<String> allSkills = frontendSkills.union(backendSkills);
print(allSkills); // {HTML, CSS, JavaScript, Python, SQL}Обратите внимание, как 'JavaScript' появляется в обоих исходных наборах, но только один раз в результате объединения. Это делает union() идеальным для объединения связанных коллекций, обеспечивая при этом отсутствие дубликатов, таких как слияние наборов навыков, объединение разрешений пользователей или консолидация данных из нескольких источников.
Вы также можете найти только те элементы, которые являются общими для двух множеств, используя метод intersection(). Он возвращает новое множество, содержащее только те элементы, которые присутствуют в обоих множествах.
Set<String> frontendSkills = {'HTML', 'CSS', 'JavaScript'};
Set<String> backendSkills = {'JavaScript', 'Python', 'SQL'};
Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills); // {JavaScript}Чтобы отобразить элементы множества в виде одной читаемой строки, используйте метод join(). Вы можете передать строку-разделитель, которая будет вставлена между элементами.
Set<String> sharedSkills = {'JavaScript'};
print(sharedSkills.join(', ')); // JavaScript
Set<String> allSkills = {'HTML', 'CSS', 'JavaScript', 'Python', 'SQL'};
print(allSkills.join(', ')); // HTML, CSS, JavaScript, Python, SQLЗадание
ЛегкоСоздайте программу для управления системой профессионального нетворкинга путем объединения наборов навыков различных членов команды для создания комплексного профиля навыков проекта. Ваша программа должна:
- Считать строковый ввод, представляющий название проекта
- Считать несколько строковых вводов, представляющих навыки первого члена команды (ввод завершится, когда вы получите
"member1_done") - Считать несколько строковых вводов, представляющих навыки второго члена команды (ввод завершится, когда вы получите
"member2_done") - Создать два отдельных объекта Set для хранения навыков каждого члена команды
- Использовать метод
union()для объединения обоих наборов навыков в комплексный профиль навыков проекта - Вывести результаты объединения навыков в точном формате, показанном ниже
Например, если название проекта — "Web Development Project", навыки первого участника — "HTML", "CSS", "JavaScript", "React", а навыки второго участника — "JavaScript", "Node.js", "MongoDB", "React", ваша программа должна вывести:
Project: Web Development Project
Team Member 1 skills: {HTML, CSS, JavaScript, React}
Team Member 2 skills: {JavaScript, Node.js, MongoDB, React}
Combined project skills: {HTML, CSS, JavaScript, React, Node.js, MongoDB}
Total unique skills available: 6
Overlapping skills: JavaScript, React
Status: Project skill profile created successfullyЕсли название проекта — "Mobile App Development", навыки первого участника — "Dart", "Flutter", "Firebase", а навыки второго участника — "Swift", "iOS", "Xcode", ваша программа должна вывести:
Project: Mobile App Development
Team Member 1 skills: {Dart, Flutter, Firebase}
Team Member 2 skills: {Swift, iOS, Xcode}
Combined project skills: {Dart, Flutter, Firebase, Swift, iOS, Xcode}
Total unique skills available: 6
Overlapping skills: None
Status: Project skill profile created successfullyЕсли название проекта — "Data Science Project", навыки первого участника — "Python", "Pandas", "NumPy", "SQL", а навыки второго участника — "Python", "SQL", "Tableau", "Statistics", ваша программа должна вывести:
Project: Data Science Project
Team Member 1 skills: {Python, Pandas, NumPy, SQL}
Team Member 2 skills: {Python, SQL, Tableau, Statistics}
Combined project skills: {Python, Pandas, NumPy, SQL, Tableau, Statistics}
Total unique skills available: 6
Overlapping skills: Python, SQL
Status: Project skill profile created successfullyВаша программа должна использовать метод union() для объединения двух наборов навыков, демонстрируя, как он автоматически обрабатывает дубликаты. Сначала покажите индивидуальные наборы навыков, а затем объединенный результат. Определите любые перекрывающиеся навыки, найдя навыки, которые присутствуют в обоих исходных наборах. Если перекрывающихся навыков нет, выведите "None" в строке перекрывающихся навыков.
Шпаргалка
Метод union() объединяет два множества в одно, содержащее все уникальные элементы из обоих множеств:
Set<String> frontendSkills = {'HTML', 'CSS', 'JavaScript'};
Set<String> backendSkills = {'JavaScript', 'Python', 'SQL'};
Set<String> allSkills = frontendSkills.union(backendSkills);
print(allSkills); // {HTML, CSS, JavaScript, Python, SQL}Метод union() автоматически обрабатывает дубликаты — если один и тот же элемент существует в обоих множествах, он появится в результирующем множестве только один раз.
Метод intersection() возвращает новое множество, содержащее только те элементы, которые присутствуют в обоих множествах:
Set<String> commonSkills = frontendSkills.intersection(backendSkills);
print(commonSkills); // {JavaScript}Метод join() преобразует множество в String, объединяя все элементы с использованием необязательного разделителя:
print(allSkills.join(', ')); // HTML, CSS, JavaScript, Python, SQLПопробуйте сами
import 'dart:io';
void main() {
// Чтение названия проекта
String? projectName = stdin.readLineSync();
// Чтение навыков первого участника команды
Set<String> member1Skills = <String>{};
String? skill;
while ((skill = stdin.readLineSync()) != "member1_done") {
if (skill != null) {
member1Skills.add(skill);
}
}
// Чтение навыков второго участника команды
Set<String> member2Skills = <String>{};
while ((skill = stdin.readLineSync()) != "member2_done") {
if (skill != null) {
member2Skills.add(skill);
}
}
// TODO: Напишите ваш код ниже
// Используйте метод union() для объединения обоих наборов навыков
// Найдите пересекающиеся навыки между двумя наборами
// Вычислите общее количество уникальных навыков
// Вывод результатов в требуемом формате
print("Project: $projectName");
print("Team Member 1 skills: $member1Skills");
print("Team Member 2 skills: $member2Skills");
// Вывод объединенных навыков, общего количества, пересекающихся навыков и статуса
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутая работа со списками
Свойства списка: first и lastСостояние списка: isEmpty и isNotEmptyРазворот спискаДобавление в список: insertУдаление из списка: removeWhereПоиск в списке: indexOfСортировка спискаПеремешивание спискаИтоги — Органайзер списков4Продвинутая работа с Map
Итерация по MapПроверка ключей и значенийСвойства Map: keys и valuesУсловное добавление: putIfAbsentУдаление записей из MapВложенные MapИтоги — Обновление инвентаря2Функциональные операции со списками
Преобразование с помощью 'map'Фильтрация с помощью 'where'Использование '.toList()'Проверка условий с помощью 'any'Условия с 'every'Поиск с помощью 'firstWhere'Повторение — фильтрация данных5Проект: Калькулятор корзины
Настройка проектаДобавление товаров в корзину3Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей