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.
Wyzwanie
ŁatwyUtwórz program, który zarządza platformą mediów społecznościowych, znajdując wspólne kontakty między dwoma użytkownikami. Program powinien:
- Wczytać ciąg znaków reprezentujący imię pierwszego użytkownika
- Wczytać wiele ciągów znaków reprezentujących kontakty pierwszego użytkownika (wczytywanie zakończy się po otrzymaniu
"user1_done") - Wczytać ciąg znaków reprezentujący imię drugiego użytkownika
- Wczytać wiele ciągów znaków reprezentujących kontakty drugiego użytkownika (wczytywanie zakończy się po otrzymaniu
"user2_done") - Utworzyć dwa osobne zbiory, aby przechowywać kontakty każdego użytkownika
- Użyć metody
intersection(), aby znaleźć wspólne kontakty obu użytkowników - 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 connectionsJeś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 connectionsJeś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 connectionsTwó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
}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
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online