Set-Differenz
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 24 von 65.
Manchmal müssen Sie Elemente finden, die in einem Set existieren, aber nicht in einem anderen. Die difference()-Methode löst dies, indem sie ein neues Set erstellt, das nur die Elemente aus dem ersten Set enthält, die im zweiten Set nicht vorhanden sind.
Stellen Sie es sich wie eine Subtraktion für Mengen vor – Sie entfernen alle Elemente der zweiten Menge aus der ersten Menge. Die Methode difference() gibt eine neue Menge mit den verbleibenden Elementen zurück, wobei beide ursprünglichen Mengen unverändert bleiben.
Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};
Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks); // {meeting, report}Diese Operation ist besonders nützlich, um herauszufinden, was fehlt, was noch zu tun ist oder was in einer Sammlung im Vergleich zu einer anderen einzigartig ist. Im Gegensatz zur Schnittmenge, die Gemeinsamkeiten findet, hebt die Differenz hervor, was eine Menge von einer anderen unterscheidet.
Aufgabe
EinfachErstellen Sie ein Programm, das ein Projektmanagementsystem verwaltet, indem es Aufgaben identifiziert, die geplant, aber noch nicht abgeschlossen sind. Ihr Programm sollte:
- Eine String-Eingabe einlesen, die den Projektnamen darstellt
- Mehrere String-Eingaben einlesen, die geplante Aufgaben darstellen (die Eingabe endet, wenn Sie
"planned_done"erhalten) - Mehrere String-Eingaben einlesen, die abgeschlossene Aufgaben darstellen (die Eingabe endet, wenn Sie
"completed_done"erhalten) - Zwei separate Sets erstellen, um die geplanten Aufgaben und die abgeschlossenen Aufgaben zu speichern
- Die Methode
difference()verwenden, um Aufgaben zu finden, die geplant, aber noch nicht abgeschlossen sind - Die Projektstatusanalyse im exakt unten gezeigten Format ausgeben
Wenn der Projektname beispielsweise "Website Launch" ist, die geplanten Aufgaben "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site" sind und die abgeschlossenen Aufgaben "Design mockups", "Setup database" sind, sollte Ihr Programm Folgendes ausgeben:
Project: Website Launch
Planned tasks: {Design mockups, Write content, Setup database, Test functionality, Deploy site}
Completed tasks: {Design mockups, Setup database}
Remaining tasks: {Write content, Test functionality, Deploy site}
Tasks completed: 2
Tasks remaining: 3
Progress: 40.0% complete
Status: Project in progress - 3 task(s) remainingWenn der Projektname "Mobile App Development" ist, die geplanten Aufgaben "Create wireframes", "Develop UI", "Implement features" sind und die abgeschlossenen Aufgaben "Create wireframes", "Develop UI", "Implement features" sind, sollte Ihr Programm Folgendes ausgeben:
Project: Mobile App Development
Planned tasks: {Create wireframes, Develop UI, Implement features}
Completed tasks: {Create wireframes, Develop UI, Implement features}
Remaining tasks: {}
Tasks completed: 3
Tasks remaining: 0
Progress: 100.0% complete
Status: Project completed successfullyWenn der Projektname "Marketing Campaign" ist, die geplanten Aufgaben "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results" sind und die abgeschlossenen Aufgaben "Research target audience" sind, sollte Ihr Programm Folgendes ausgeben:
Project: Marketing Campaign
Planned tasks: {Research target audience, Create content, Design graphics, Launch campaign, Analyze results}
Completed tasks: {Research target audience}
Remaining tasks: {Create content, Design graphics, Launch campaign, Analyze results}
Tasks completed: 1
Tasks remaining: 4
Progress: 20.0% complete
Status: Project in progress - 4 task(s) remainingIhr Programm muss die Methode difference() verwenden, um Aufgaben zu finden, die im Set der geplanten Aufgaben, aber nicht im Set der abgeschlossenen Aufgaben vorhanden sind. Berechnen Sie den Fortschrittsprozentsatz, indem Sie die abgeschlossenen Aufgaben durch die gesamten geplanten Aufgaben dividieren und mit 100 multiplizieren, gerundet auf 1 Dezimalstelle. Wenn alle Aufgaben abgeschlossen sind, zeigen Sie "Project completed successfully" als Status an, andernfalls zeigen Sie "Project in progress - X task(s) remaining", wobei X die Anzahl der verbleibenden Aufgaben ist.
Spickzettel
Die Methode difference() erstellt ein neues Set, das Elemente aus dem ersten Set enthält, die im zweiten Set nicht vorhanden sind:
Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};
Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks); // {meeting, report}Diese Operation ist wie eine Subtraktion für Sets – sie entfernt alle Elemente des zweiten Sets aus dem ersten Set und gibt ein neues Set mit den verbleibenden Elementen zurück, während beide ursprünglichen Sets unverändert bleiben.
Probier es selbst
import 'dart:io';
void main() {
// Projektname lesen
String? projectName = stdin.readLineSync();
// Geplante Aufgaben lesen bis "planned_done"
Set<String> plannedTasks = <String>{};
String? task;
while ((task = stdin.readLineSync()) != "planned_done") {
if (task != null) {
plannedTasks.add(task);
}
}
// Abgeschlossene Aufgaben lesen bis "completed_done"
Set<String> completedTasks = <String>{};
while ((task = stdin.readLineSync()) != "completed_done") {
if (task != null) {
completedTasks.add(task);
}
}
// TODO: Schreiben Sie Ihren Code unten
// Verwenden Sie die Methode difference(), um verbleibende Aufgaben zu finden
// Berechnen Sie den Fortschritt in Prozent
// Bestimmen Sie den Projektstatus
// Ergebnisse ausgeben
print("Project: $projectName");
print("Planned tasks: $plannedTasks");
print("Completed tasks: $completedTasks");
// Fügen Sie hier weitere 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