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

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

  1. Eine String-Eingabe lesen, die den Projektnamen darstellt
  2. Mehrere String-Eingaben lesen, die geplante Aufgaben darstellen (die Eingabe endet, sobald du "planned_done" erhältst)
  3. Mehrere String-Eingaben lesen, die abgeschlossene Aufgaben darstellen (die Eingabe endet, sobald du "completed_done" erhältst)
  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 exakt im unten gezeigten Format ausgeben

Wenn der Projektname beispielsweise "Website Launch" lautet, die geplanten Aufgaben "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site" sind und die abgeschlossenen Aufgaben "Design mockups", "Setup database" lauten, sollte dein 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" lautet, die geplanten Aufgaben "Create wireframes", "Develop UI", "Implement features" sind und die abgeschlossenen Aufgaben "Create wireframes", "Develop UI", "Implement features" lauten, sollte dein 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" lautet, die geplanten Aufgaben "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results" sind und die abgeschlossene Aufgabe "Research target audience" lautet, sollte dein 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

Dein Programm muss die Methode difference() verwenden, um Aufgaben zu finden, die im Set der geplanten Aufgaben vorhanden sind, aber nicht im Set der abgeschlossenen Aufgaben. Berechne den Fortschrittsprozentsatz, indem du die Anzahl der abgeschlossenen Aufgaben durch die Gesamtzahl der geplanten Aufgaben dividierst, mit 100 multiplizierst und auf 1 Dezimalstelle rundest. Wenn alle Aufgaben abgeschlossen sind, zeige "Project completed successfully" als Status an. Andernfalls zeige "Project in progress - X task(s) remaining" an, wobei X die Anzahl der verbleibenden Aufgaben ist.

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

Übe selbstständig: Online-Dart-Compiler