Set-Vereinigung
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy. Lektion 22 von 65.
Wenn du zwei separate Set-Sammlungen hast, kannst du sie mithilfe der Methode union() zu einer einzigen Menge kombinieren, die alle eindeutigen Elemente aus beiden enthält. Dieser Vorgang erstellt eine neue Menge, die jedes Element umfasst, das in einer der ursprünglichen Mengen vorkommt.
Die Methode union() behandelt Duplikate automatisch für dich. Wenn dasselbe Element in beiden Mengen vorhanden ist, erscheint es in der resultierenden Vereinigungsmenge nur einmal, wodurch die grundlegende Eigenschaft erhalten bleibt, dass Mengen 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}Beachte, wie „JavaScript“ in beiden ursprünglichen Mengen vorkommt, aber im Ergebnis der Vereinigung nur einmal erscheint. Dadurch eignet sich union() perfekt zum Kombinieren verwandter Sammlungen, während Duplikate vermieden werden, etwa beim Zusammenführen von Kompetenzmengen, beim Kombinieren von Benutzerberechtigungen oder beim Konsolidieren von Daten aus mehreren Quellen.
Um Elemente zu finden, die in beiden Mengen vorkommen, verwende die Methode intersection(). Sie gibt eine neue Menge zurück, die nur die gemeinsamen Elemente enthält:
Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills); // {JavaScript}Sobald du eine Menge überlappender Elemente hast, kannst du sie mithilfe der join()-Methode in eine lesbare Zeichenfolge umwandeln. Das funktioniert genauso wie bei einer List. Dabei werden alle Elemente mit einem von dir angegebenen Trennzeichen zu einer einzigen Zeichenfolge verbunden:
Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result); // JavaScriptZusammen bieten union(), intersection() und join() leistungsstarke Werkzeuge zum Vergleichen und Anzeigen von Mengendaten, beispielsweise zum Kombinieren der Fähigkeiten von Teams und zum Ermitteln, welche Fähigkeiten sie bereits gemeinsam haben.
Aufgabe
EinfachErstelle ein Programm, das ein professionelles Networking-System verwaltet, indem es die Fähigkeiten verschiedener Teammitglieder kombiniert, um ein umfassendes Kompetenzprofil für ein Projekt zu erstellen. Dein Programm sollte:
- Eine Zeichenketteneingabe lesen, die den Projektnamen darstellt
- Mehrere Zeichenketteneingaben lesen, die die Fähigkeiten des ersten Teammitglieds darstellen (die Eingabe endet, wenn du
"member1_done"erhältst) - Mehrere Zeichenketteneingaben lesen, die die Fähigkeiten des zweiten Teammitglieds darstellen (die Eingabe endet, wenn du
"member2_done"erhältst) - Zwei separate Sets erstellen, um die Fähigkeiten der beiden Teammitglieder zu speichern
- Die Methode
union()verwenden, um beide Fähigkeitensets zu einem umfassenden Kompetenzprofil für das Projekt zu kombinieren - Die Ergebnisse der Fähigkeitskombination im unten gezeigten exakten Format ausgeben
Wenn der Projektname beispielsweise "Web Development Project" lautet, 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 dein 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" lautet, die Fähigkeiten des ersten Mitglieds "Dart", "Flutter", "Firebase" sind und die Fähigkeiten des zweiten Mitglieds "Swift", "iOS", "Xcode" sind, sollte dein 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" lautet, die Fähigkeiten des ersten Mitglieds "Python", "Pandas", "NumPy", "SQL" sind und die Fähigkeiten des zweiten Mitglieds "Python", "SQL", "Tableau", "Statistics" sind, sollte dein 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 successfullyDein Programm muss die Methode union() verwenden, um die beiden Fähigkeitensets zu kombinieren, und damit zeigen, wie Duplikate automatisch behandelt werden. Zeige zuerst die einzelnen Fähigkeitensets und anschließend das kombinierte Ergebnis. Ermittle alle sich überschneidenden Fähigkeiten, indem du die Fähigkeiten findest, die in beiden ursprünglichen Sets vorkommen. Wenn es keine sich überschneidenden Fähigkeiten gibt, gib für die Zeile mit den sich überschneidenden Fähigkeiten „None“ aus.
Probier es selbst
import 'dart:io';
void main() {
// Projektname 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 darunter
// Verwende die union()-Methode, um beide Fähigkeitensätze zu kombinieren
// Find overlapping skills between the two sets
// Calculate total unique skills
// Gib die Ergebnisse im erforderlichen Format aus
print("Project: $projectName");
print("Team Member 1 skills: $member1Skills");
print("Team Member 2 skills: $member2Skills");
// Print combined skills, total count, overlapping skills, and status
}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Übe selbstständig: Online-Dart-Compiler