Set-Schnittmenge
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 23 von 65.
Wenn Sie Elemente finden müssen, die in beiden von zwei Set-Sammlungen vorhanden sind, bietet die intersection()-Methode die perfekte Lösung. Diese Operation identifiziert die gemeinsamen Elemente zwischen zwei Sets und erstellt ein neues Set, das nur die Elemente enthält, die in beiden ursprünglichen Sammlungen vorkommen.
Die Methode intersection() vergleicht die Elemente zweier Sets und gibt ein neues Set zurück, das nur die gemeinsamen Werte enthält. Wie andere Set-Operationen behandelt sie die Eindeutigkeit automatisch, sodass jedes gemeinsame Element nur einmal im Ergebnis erscheint.
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}Diese Operation ist besonders nützlich, um Überschneidungen in Daten zu finden, wie zum Beispiel gemeinsame Interessen zwischen Benutzern, geteilte Fähigkeiten in Teams oder übereinstimmende Kriterien in Filteroperationen. Die Schnittmenge hilft Ihnen zu identifizieren, was zwei Sammlungen gemeinsam haben, was sie für Vergleichs- und Analyseaufgaben wertvoll macht.
Aufgabe
EinfachErstellen Sie ein Programm, das eine Social-Media-Plattform verwaltet, indem es gemeinsame Verbindungen zwischen zwei Benutzern findet. Ihr Programm sollte:
- Eine String-Eingabe lesen, die den Namen des ersten Benutzers darstellt
- Mehrere String-Eingaben lesen, die die Verbindungen des ersten Benutzers darstellen (die Eingabe endet, wenn Sie
"user1_done"erhalten) - Eine String-Eingabe lesen, die den Namen des zweiten Benutzers darstellt
- Mehrere String-Eingaben lesen, die die Verbindungen des zweiten Benutzers darstellen (die Eingabe endet, wenn Sie
"user2_done"erhalten) - Zwei separate Sets erstellen, um die Verbindungen jedes Benutzers zu speichern
- Die Methode
intersection()verwenden, um gemeinsame Verbindungen zwischen beiden Benutzern zu finden - Die Ergebnisse der Verbindungsanalyse im unten gezeigten exakten Format ausgeben
Wenn zum Beispiel der erste Benutzer "Alice" mit den Verbindungen "Bob", "Charlie", "Diana", "Eve" ist und der zweite Benutzer "Bob" mit den Verbindungen "Alice", "Charlie", "Frank", "Diana" ist, sollte Ihr Programm Folgendes ausgeben:
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 connectionsWenn der erste Benutzer "Sarah" mit den Verbindungen "John", "Mike", "Lisa" ist und der zweite Benutzer "Tom" mit den Verbindungen "Emma", "David", "Kate" ist, sollte Ihr Programm Folgendes ausgeben:
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 connectionsWenn der erste Benutzer "Emma" mit den Verbindungen "Alex", "Jordan", "Taylor", "Morgan" ist und der zweite Benutzer "Jordan" mit den Verbindungen "Emma", "Taylor", "Casey" ist, sollte Ihr Programm Folgendes ausgeben:
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 connectionsIhr Programm muss die Methode intersection() verwenden, um gemeinsame Verbindungen zwischen den beiden Benutzer-Sets zu finden. Bestimmen Sie die Verbindungsstärke basierend auf der Anzahl der gemeinsamen Verbindungen: "None" für 0 gemeinsame Verbindungen, "Weak" für genau 1 gemeinsame Verbindung und "Strong" für 2 oder mehr gemeinsame Verbindungen. Wenn gemeinsame Verbindungen bestehen, zeigen Sie "Users have mutual connections" als Status an, andernfalls zeigen Sie "Users have no mutual connections".
Spickzettel
Die Methode intersection() findet gemeinsame Elemente zwischen zwei Sets und gibt ein neues Set zurück, das nur die geteilten Werte enthält:
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}Diese Operation berücksichtigt automatisch die Eindeutigkeit und ist nützlich, um Überschneidungen in Daten zu finden, wie zum Beispiel gemeinsame Interessen, geteilte Fähigkeiten oder Übereinstimmungskriterien in Filteroperationen.
Probier es selbst
import 'dart:io';
void main() {
// Namen des ersten Benutzers lesen
String? user1Name = stdin.readLineSync();
// Verbindungen des ersten Benutzers lesen bis "user1_done"
Set<String> user1Connections = <String>{};
String? connection;
while ((connection = stdin.readLineSync()) != "user1_done") {
if (connection != null) {
user1Connections.add(connection);
}
}
// Namen des zweiten Benutzers lesen
String? user2Name = stdin.readLineSync();
// Verbindungen des zweiten Benutzers lesen bis "user2_done"
Set<String> user2Connections = <String>{};
while ((connection = stdin.readLineSync()) != "user2_done") {
if (connection != null) {
user2Connections.add(connection);
}
}
// TODO: Schreiben Sie Ihren Code unten
// Gemeinsame Verbindungen mit der Methode intersection() finden
// Verbindungsstärke basierend auf der Anzahl der gemeinsamen Verbindungen bestimmen
// Das erforderliche Ausgabeformat generieren
// Die Analyseergebnisse ausgeben
print("User Analysis: Finding mutual connections");
// Fügen Sie hier Ihre Ausgabeanweisungen hinzu
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste