Menu
Coddy logo textTech

Пересечение множеств

Часть раздела Логика и управление потоком путешествия по 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}

Эта операция особенно полезна для поиска пересечений в данных, таких как общие интересы пользователей, общие навыки в командах или совпадающие критерии в операциях фильтрации. Пересечение помогает определить, что общего у двух коллекций, что делает его ценным для задач сравнения и анализа.

challenge icon

Задание

Легко

Создайте программу для управления платформой социальных сетей, которая находит общие связи между двумя пользователями. Ваша программа должна:

  1. Прочитать строковый ввод, представляющий имя первого пользователя
  2. Прочитать несколько строковых вводов, представляющих связи первого пользователя (ввод закончится, когда вы получите "user1_done")
  3. Прочитать строковый ввод, представляющий имя второго пользователя
  4. Прочитать несколько строковых вводов, представляющих связи второго пользователя (ввод закончится, когда вы получите "user2_done")
  5. Создать два отдельных объекта Set для хранения связей каждого пользователя
  6. Использовать метод intersection() для поиска общих связей между обоими пользователями
  7. Вывести результаты анализа соединений в точном формате, показанном ниже

Например, если первым пользователем является "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");
  // Добавьте ваши операторы вывода здесь
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком