Menu
Coddy logo textTech

Część wspólna zbiorów

Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 23 z 65.

Gdy musisz znaleźć elementy występujące w obu kolekcjach Set, metoda intersection() zapewnia idealne rozwiązanie. Ta operacja identyfikuje wspólne elementy dwóch zbiorów, tworząc nowy zbiór zawierający tylko te elementy, które występują w obu oryginalnych kolekcjach.

Metoda intersection() działa przez porównywanie elementów dwóch zbiorów i zwracanie nowego zbioru zawierającego tylko wspólne wartości. Podobnie jak inne operacje na zbiorach, automatycznie obsługuje unikalność, więc każdy wspólny element pojawia się w wyniku tylko raz.

Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};

Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends);  // {Charlie, Diana}

Ta operacja jest szczególnie przydatna do znajdowania części wspólnych w danych, takich jak wspólne zainteresowania użytkowników, umiejętności dzielone przez członków zespołów czy kryteria dopasowania w operacjach filtrowania. Część wspólna pomaga ustalić, co mają wspólnego dwie kolekcje, dzięki czemu jest przydatna w zadaniach porównywania i analizy.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który zarządza platformą mediów społecznościowych, znajdując wspólne kontakty między dwoma użytkownikami. Program powinien:

  1. Wczytać ciąg znaków reprezentujący imię pierwszego użytkownika
  2. Wczytać wiele ciągów znaków reprezentujących kontakty pierwszego użytkownika (wczytywanie zakończy się po otrzymaniu "user1_done")
  3. Wczytać ciąg znaków reprezentujący imię drugiego użytkownika
  4. Wczytać wiele ciągów znaków reprezentujących kontakty drugiego użytkownika (wczytywanie zakończy się po otrzymaniu "user2_done")
  5. Utworzyć dwa osobne zbiory, aby przechowywać kontakty każdego użytkownika
  6. Użyć metody intersection(), aby znaleźć wspólne kontakty obu użytkowników
  7. Wyświetlić wyniki analizy kontaktów w dokładnie takim formacie, jak pokazano poniżej

Na przykład, jeśli pierwszym użytkownikiem jest "Alice", a jego kontakty to "Bob", "Charlie", "Diana", "Eve", zaś drugim użytkownikiem jest "Bob", a jego kontakty to "Alice", "Charlie", "Frank", "Diana", program powinien wyświetlić:

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

Jeśli pierwszym użytkownikiem jest "Sarah", a jej kontakty to "John", "Mike", "Lisa", zaś drugim użytkownikiem jest "Tom", a jego kontakty to "Emma", "David", "Kate", program powinien wyświetlić:

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

Jeśli pierwszym użytkownikiem jest "Emma", a jej kontakty to "Alex", "Jordan", "Taylor", "Morgan", zaś drugim użytkownikiem jest "Jordan", a jego kontakty to "Emma", "Taylor", "Casey", program powinien wyświetlić:

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

Twój program musi używać metody intersection(), aby znaleźć wspólne kontakty między zbiorami obu użytkowników. Określ siłę połączenia na podstawie liczby wspólnych kontaktów: "None" dla 0 wspólnych kontaktów, "Weak" dla dokładnie 1 wspólnego kontaktu oraz "Strong" dla 2 lub więcej wspólnych kontaktów. Jeśli istnieją wspólne kontakty, wyświetl "Users have mutual connections" jako status, w przeciwnym razie wyświetl "Users have no mutual connections".

Spróbuj swoich sił

import 'dart:io';

void main() {
  // Wczytaj imię pierwszego użytkownika
  String? user1Name = stdin.readLineSync();
  
  // Wczytuj połączenia pierwszego użytkownika's connections aż do "user1_done"
  Set<String> user1Connections = <String>{};
  String? connection;
  while ((connection = stdin.readLineSync()) != "user1_done") {
    if (connection != null) {
      user1Connections.add(connection);
    }
  }
  
  // Wczytaj imię drugiego użytkownika
  String? user2Name = stdin.readLineSync();
  
  // Wczytuj połączenia drugiego użytkownika's connections aż do "user2_done"
  Set<String> user2Connections = <String>{};
  while ((connection = stdin.readLineSync()) != "user2_done") {
    if (connection != null) {
      user2Connections.add(connection);
    }
  }
  
  // TODO: Napisz swój kod poniżej
  // Znajdź wspólne połączenia za pomocą metody intersection()
  // Określ siłę powiązania na podstawie liczby wspólnych połączeń
  // Wygeneruj wynik w wymaganym formacie
  
  // Wyświetl wyniki analizy
  print("User Analysis: Finding mutual connections");
  // Dodaj tutaj instrukcje wyświetlające wynik
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Dart online