Menu
Coddy logo textTech

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.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das ein Projektmanagementsystem verwaltet, indem es Aufgaben identifiziert, die geplant, aber noch nicht abgeschlossen sind. Ihr Programm sollte:

  1. Eine String-Eingabe einlesen, die den Projektnamen darstellt
  2. Mehrere String-Eingaben einlesen, die geplante Aufgaben darstellen (die Eingabe endet, wenn Sie "planned_done" erhalten)
  3. Mehrere String-Eingaben einlesen, die abgeschlossene Aufgaben darstellen (die Eingabe endet, wenn Sie "completed_done" erhalten)
  4. Zwei separate Sets erstellen, um die geplanten Aufgaben und die abgeschlossenen Aufgaben zu speichern
  5. Die Methode difference() verwenden, um Aufgaben zu finden, die geplant, aber noch nicht abgeschlossen sind
  6. 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) remaining

Wenn 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 successfully

Wenn 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) remaining

Ihr 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
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf