Eine Liste in ein Set umwandeln
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 21 von 65.
Eine der praktischsten Anwendungen von Set ist das Entfernen doppelter Elemente aus einer List. Da Sets Duplikate automatisch eliminieren, können Sie eine Liste mit wiederholten Werten ganz einfach in eine Sammlung eindeutiger Elemente umwandeln.
Um eine List in ein Set zu konvertieren, übergeben Sie die Liste einfach an den Set.from() Konstruktor. Dies erstellt ein neues Set, das alle eindeutigen Elemente der ursprünglichen Liste enthält.
List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);
print(uniqueNumbers); // {1, 2, 3, 4, 5}Wenn Sie das Ergebnis als List zurückbenötigen (vielleicht um die Kompatibilität mit anderen Teilen Ihres Codes zu wahren), können Sie das Set mit toList() wieder in eine Liste umwandeln. Dies liefert Ihnen eine Liste, die nur die eindeutigen Elemente aus dem Original enthält.
List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList); // [1, 2, 3, 4, 5]Dieses Muster von Liste → Set → Liste ist extrem gebräuchlich, wenn Sie Daten bereinigen müssen, indem Sie Duplikate entfernen und gleichzeitig die Listenstruktur für die weitere Verarbeitung beibehalten.
Aufgabe
EinfachErstellen Sie ein Programm, das ein Datenbereinigungssystem verwaltet, indem es doppelte Einträge aus Umfrageantworten entfernt. Ihr Programm sollte:
- Einen String-Input einlesen, der den Umfragetitel darstellt
- Mehrere String-Inputs einlesen, die Umfrageantworten darstellen (die Eingabe endet, wenn Sie
"responses_done"erhalten) - Eine List erstellen, um alle ursprünglichen Antworten (einschließlich Duplikate) zu speichern
Set.from()verwenden, um die Liste in ein Set umzuwandeln, wodurch Duplikate automatisch entfernt werdentoList()verwenden, um das Set wieder in eine List mit eindeutigen Antworten umzuwandeln- Die Ergebnisse der Datenbereinigung im unten gezeigten exakten Format ausgeben
Wenn der Umfragetitel beispielsweise "Customer Satisfaction Survey" lautet und die Antworten "Excellent", "Good", "Excellent", "Fair", "Good", "Excellent", "Poor" sind, sollte Ihr Programm Folgendes ausgeben:
Survey: Customer Satisfaction Survey
Original responses: [Excellent, Good, Excellent, Fair, Good, Excellent, Poor]
Total responses collected: 7
Converting to Set to remove duplicates...
Unique responses (Set): {Excellent, Good, Fair, Poor}
Converting back to List...
Cleaned responses: [Excellent, Good, Fair, Poor]
Duplicates removed: 3
Final unique responses: 4
Status: Data cleaning completed successfullyWenn der Umfragetitel "Product Feedback" lautet und die Antworten "Like", "Dislike", "Like", "Like" sind, sollte Ihr Programm Folgendes ausgeben:
Survey: Product Feedback
Original responses: [Like, Dislike, Like, Like]
Total responses collected: 4
Converting to Set to remove duplicates...
Unique responses (Set): {Like, Dislike}
Converting back to List...
Cleaned responses: [Like, Dislike]
Duplicates removed: 2
Final unique responses: 2
Status: Data cleaning completed successfullyWenn der Umfragetitel "Event Rating" lautet und die Antworten "Amazing", "Okay", "Great" sind, sollte Ihr Programm Folgendes ausgeben:
Survey: Event Rating
Original responses: [Amazing, Okay, Great]
Total responses collected: 3
Converting to Set to remove duplicates...
Unique responses (Set): {Amazing, Okay, Great}
Converting back to List...
Cleaned responses: [Amazing, Okay, Great]
Duplicates removed: 0
Final unique responses: 3
Status: Data cleaning completed successfullyIhr Programm muss das vollständige Muster List → Set → List demonstrieren. Speichern Sie zuerst alle Antworten in einer List, verwenden Sie dann Set.from(), um ein Set aus der List zu erstellen, und verwenden Sie schließlich toList(), um das Set wieder in eine List umzuwandeln. Berechnen Sie die Anzahl der entfernten Duplikate, indem Sie die endgültige Anzahl der eindeutigen Werte von der ursprünglichen Gesamtzahl subtrahieren.
Spickzettel
Um Duplikate aus einer List zu entfernen, konvertieren Sie diese mit Set.from() in ein Set:
List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);
print(uniqueNumbers); // {1, 2, 3, 4, 5}Um ein Set wieder in eine List umzuwandeln, verwenden Sie toList():
List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList); // [1, 2, 3, 4, 5]Das Muster List → Set → List wird häufig zur Datenbereinigung verwendet, während die Listenstruktur beibehalten wird.
Probier es selbst
import 'dart:io';
void main() {
// Umfragetitel lesen
String? surveyTitle = stdin.readLineSync();
// Umfrageantworten lesen bis "responses_done"
List<String> originalResponses = [];
String? response;
while ((response = stdin.readLineSync()) != "responses_done") {
if (response != null) {
originalResponses.add(response);
}
}
// TODO: Schreiben Sie Ihren Code unten
// 1. Verwenden Sie Set.from(), um die Liste in ein Set umzuwandeln (entfernt Duplikate)
// 2. Verwenden Sie toList(), um das Set wieder in eine Liste umzuwandeln
// 3. Berechnen Sie die entfernten Duplikate und die endgültige Anzahl
// Ergebnisse im erforderlichen Format ausgeben
print("Survey: $surveyTitle");
print("Original responses: $originalResponses");
// Weitere Print-Anweisungen hier hinzufügen
}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