Пересечение множеств
Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 23 из 65.
Когда вам нужно найти элементы, которые присутствуют в обеих коллекциях Set, метод intersection() предоставляет идеальное решение. Эта операция определяет общие элементы между двумя наборами, создавая новый набор, содержащий только те элементы, которые присутствуют в обеих исходных коллекциях.
Метод intersection() работает путем сравнения элементов двух множеств и возвращает новое множество, содержащее только общие значения. Как и другие операции с множествами, он автоматически обрабатывает уникальность, поэтому каждый общий элемент появляется в результате только один раз.
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}Эта операция особенно полезна для поиска пересечений в данных, таких как общие интересы пользователей, общие навыки в командах или совпадающие критерии в операциях фильтрации. Пересечение помогает определить, что общего у двух коллекций, что делает его ценным для задач сравнения и анализа.
Задание
ЛегкоСоздайте программу для управления платформой социальных сетей, которая находит общие связи между двумя пользователями. Ваша программа должна:
- Прочитать строковый ввод, представляющий имя первого пользователя
- Прочитать несколько строковых вводов, представляющих связи первого пользователя (ввод закончится, когда вы получите
"user1_done") - Прочитать строковый ввод, представляющий имя второго пользователя
- Прочитать несколько строковых вводов, представляющих связи второго пользователя (ввод закончится, когда вы получите
"user2_done") - Создать два отдельных объекта Set для хранения связей каждого пользователя
- Использовать метод
intersection()для поиска общих связей между обоими пользователями - Вывести результаты анализа соединений в точном формате, показанном ниже
Например, если первым пользователем является "Alice" со связями "Bob", "Charlie", "Diana", "Eve", а вторым пользователем — "Bob" со связями "Alice", "Charlie", "Frank", "Diana", ваша программа должна вывести:
User Analysis: Finding mutual connections
Alice's connections: {Bob, Charlie, Diana, Eve}
Bob's connections: {Alice, Charlie, Frank, Diana}
Mutual connections: {Charlie, Diana}
Total mutual connections: 2
Connection strength: Strong (2+ mutual connections)
Status: Users have mutual connectionsЕсли первым пользователем является "Sarah" со связями "John", "Mike", "Lisa", а вторым пользователем — "Tom" со связями "Emma", "David", "Kate", ваша программа должна вывести:
User Analysis: Finding mutual connections
Sarah's connections: {John, Mike, Lisa}
Tom's connections: {Emma, David, Kate}
Mutual connections: {}
Total mutual connections: 0
Connection strength: None (no mutual connections)
Status: Users have no mutual connectionsЕсли первым пользователем является "Emma" со связями "Alex", "Jordan", "Taylor", "Morgan", а вторым пользователем — "Jordan" со связями "Emma", "Taylor", "Casey", ваша программа должна вывести:
User Analysis: Finding mutual connections
Emma's connections: {Alex, Jordan, Taylor, Morgan}
Jordan's connections: {Emma, Taylor, Casey}
Mutual connections: {Taylor}
Total mutual connections: 1
Connection strength: Weak (1 mutual connection)
Status: Users have mutual connectionsВаша программа должна использовать метод intersection() для поиска общих связей между двумя наборами (Sets) пользователей. Определите силу связи на основе количества общих связей: "None" для 0 общих связей, "Weak" для ровно 1 общей связи и "Strong" для 2 или более общих связей. Если есть общие связи, выведите "Users have mutual connections" в качестве статуса, в противном случае выведите "Users have no mutual connections".
Шпаргалка
Метод intersection() находит общие элементы между двумя множествами, возвращая новое множество, содержащее только общие значения:
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}Эта операция автоматически обеспечивает уникальность и полезна для поиска пересечений в данных, таких как общие интересы, общие навыки или критерии соответствия в операциях фильтрации.
Попробуйте сами
import 'dart:io';
void main() {
// Чтение имени первого пользователя
String? user1Name = stdin.readLineSync();
// Чтение связей первого пользователя до "user1_done"
Set<String> user1Connections = <String>{};
String? connection;
while ((connection = stdin.readLineSync()) != "user1_done") {
if (connection != null) {
user1Connections.add(connection);
}
}
// Чтение имени второго пользователя
String? user2Name = stdin.readLineSync();
// Чтение связей второго пользователя до "user2_done"
Set<String> user2Connections = <String>{};
while ((connection = stdin.readLineSync()) != "user2_done") {
if (connection != null) {
user2Connections.add(connection);
}
}
// TODO: Напишите свой код ниже
// Поиск общих связей с помощью метода intersection()
// Определение силы связи на основе количества общих связей
// Генерация требуемого формата вывода
// Вывод результатов анализа
print("User Analysis: Finding mutual connections");
// Добавьте ваши операторы вывода здесь
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей