Set-Vereinigung
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 22 von 65.
Wenn Sie zwei separate Set-Sammlungen haben, können Sie diese mithilfe der Methode union() zu einem einzigen Set kombinieren, das alle eindeutigen Elemente aus beiden enthält. Diese Operation erstellt ein neues Set, das jedes Element enthält, das in mindestens einem der ursprünglichen Sets vorkommt.
Die Methode union() verarbeitet Duplikate automatisch für Sie. Wenn dasselbe Element in beiden Sets vorhanden ist, erscheint es in der resultierenden Vereinigungsmenge nur einmal, wodurch die grundlegende Eigenschaft gewahrt bleibt, dass Sets nur eindeutige Werte enthalten.
Set<String> frontendSkills = {'HTML', 'CSS', 'JavaScript'};
Set<String> backendSkills = {'JavaScript', 'Python', 'SQL'};
Set<String> allSkills = frontendSkills.union(backendSkills);
print(allSkills); // {HTML, CSS, JavaScript, Python, SQL}Beachten Sie, wie 'JavaScript' in beiden ursprünglichen Mengen vorkommt, aber nur einmal im Ergebnis der Vereinigung. Dies macht union() perfekt für das Kombinieren verwandter Sammlungen, während gleichzeitig sichergestellt wird, dass keine Duplikate entstehen, wie zum Beispiel beim Zusammenführen von Skill-Sets, dem Kombinieren von Benutzerberechtigungen oder dem Konsolidieren von Daten aus mehreren Quellen.
Um Elemente zu finden, die in beiden Sets vorkommen, verwende die intersection()-Methode. Sie gibt ein neues Set zurück, das nur die gemeinsamen Elemente enthält:
Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills); // {JavaScript}Sobald Sie eine Menge überlappender Elemente haben, können Sie diese mit der Methode join() in einen lesbaren String umwandeln. Dies funktioniert genauso wie bei einer List — es verbindet alle Elemente zu einem einzigen String mit einem von Ihnen angegebenen Trennzeichen:
Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result); // JavaScriptZusammen bieten union(), intersection() und join() Ihnen leistungsstarke Werkzeuge zum Vergleichen und Anzeigen von Mengendaten – zum Beispiel zum Kombinieren von Team-Fähigkeiten und zum Identifizieren, welche Fähigkeiten sie bereits teilen.
Aufgabe
EinfachErstellen Sie ein Programm, das ein professionelles Networking-System verwaltet, indem es die Fähigkeiten verschiedener Teammitglieder kombiniert, um ein umfassendes Projekt-Skill-Profil zu erstellen. Ihr Programm sollte:
- Eine String-Eingabe lesen, die den Projektnamen darstellt
- Mehrere String-Eingaben lesen, die die Fähigkeiten des ersten Teammitglieds darstellen (die Eingabe endet, wenn Sie
"member1_done"erhalten) - Mehrere String-Eingaben lesen, die die Fähigkeiten des zweiten Teammitglieds darstellen (die Eingabe endet, wenn Sie
"member2_done"erhalten) - Zwei separate Sets erstellen, um die Fähigkeiten jedes Teammitglieds zu speichern
- Die Methode
union()verwenden, um beide Skill-Sets zu einem umfassenden Projekt-Skill-Profil zu kombinieren - Die Ergebnisse der Skill-Kombination im unten gezeigten exakten Format ausgeben
Wenn der Projektname beispielsweise "Web Development Project" ist, die Fähigkeiten des ersten Mitglieds "HTML", "CSS", "JavaScript", "React" sind und die Fähigkeiten des zweiten Mitglieds "JavaScript", "Node.js", "MongoDB", "React" sind, sollte Ihr Programm Folgendes ausgeben:
Project: Web Development Project
Team Member 1 skills: {HTML, CSS, JavaScript, React}
Team Member 2 skills: {JavaScript, Node.js, MongoDB, React}
Combined project skills: {HTML, CSS, JavaScript, React, Node.js, MongoDB}
Total unique skills available: 6
Overlapping skills: JavaScript, React
Status: Project skill profile created successfullyWenn der Projektname "Mobile App Development" ist, die Fähigkeiten des ersten Mitglieds "Dart", "Flutter", "Firebase" sind und die Fähigkeiten des zweiten Mitglieds "Swift", "iOS", "Xcode" sind, sollte Ihr Programm Folgendes ausgeben:
Project: Mobile App Development
Team Member 1 skills: {Dart, Flutter, Firebase}
Team Member 2 skills: {Swift, iOS, Xcode}
Combined project skills: {Dart, Flutter, Firebase, Swift, iOS, Xcode}
Total unique skills available: 6
Overlapping skills: None
Status: Project skill profile created successfullyWenn der Projektname "Data Science Project" ist, die Fähigkeiten des ersten Mitglieds "Python", "Pandas", "NumPy", "SQL" sind und die Fähigkeiten des zweiten Mitglieds "Python", "SQL", "Tableau", "Statistics" sind, sollte Ihr Programm Folgendes ausgeben:
Project: Data Science Project
Team Member 1 skills: {Python, Pandas, NumPy, SQL}
Team Member 2 skills: {Python, SQL, Tableau, Statistics}
Combined project skills: {Python, Pandas, NumPy, SQL, Tableau, Statistics}
Total unique skills available: 6
Overlapping skills: Python, SQL
Status: Project skill profile created successfullyIhr Programm muss die Methode union() verwenden, um die beiden Skill-Sets zu kombinieren, und dabei demonstrieren, wie sie Duplikate automatisch verarbeitet. Zeigen Sie zuerst die einzelnen Skill-Sets an, dann das kombinierte Ergebnis. Identifizieren Sie alle überlappenden Fähigkeiten, indem Sie Fähigkeiten finden, die in beiden ursprünglichen Sets vorkommen. Wenn es keine überlappenden Fähigkeiten gibt, zeigen Sie "None" für die Zeile der überlappenden Fähigkeiten an.
Probier es selbst
import 'dart:io';
void main() {
// Projektnamen lesen
String? projectName = stdin.readLineSync();
// Fähigkeiten des ersten Teammitglieds lesen
Set<String> member1Skills = <String>{};
String? skill;
while ((skill = stdin.readLineSync()) != "member1_done") {
if (skill != null) {
member1Skills.add(skill);
}
}
// Fähigkeiten des zweiten Teammitglieds lesen
Set<String> member2Skills = <String>{};
while ((skill = stdin.readLineSync()) != "member2_done") {
if (skill != null) {
member2Skills.add(skill);
}
}
// TODO: Schreibe deinen Code unten
// Verwende die union() Methode, um beide Skill-Sets zu kombinieren
// Finde überschneidende Fähigkeiten zwischen den beiden Sets
// Berechne die Gesamtzahl der einzigartigen Fähigkeiten
// Gib die Ergebnisse im erforderlichen Format aus
print("Project: $projectName");
print("Team Member 1 skills: $member1Skills");
print("Team Member 2 skills: $member2Skills");
// Gib kombinierte Fähigkeiten, Gesamtzahl, überschneidende Fähigkeiten und Status aus
}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