Menu
Coddy logo textTech

Różnica zbiorów

Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 24 z 65.

Czasami trzeba znaleźć elementy, które występują w jednym zbiorze Set, ale nie w innym. Metoda difference() rozwiązuje ten problem, tworząc nowy zbiór zawierający wyłącznie elementy z pierwszego zbioru, których nie ma w drugim zbiorze.

Pomyśl o tym jak o odejmowaniu zbiorów — usuwasz wszystkie elementy drugiego zbioru z pierwszego. Metoda difference() zwraca nowy zbiór z pozostałymi elementami, nie zmieniając żadnego z pierwotnych zbiorów.

Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};

Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks);  // {meeting, report}

Ta operacja jest szczególnie przydatna do znajdowania brakujących elementów, tego, co pozostało do zrobienia, lub elementów unikalnych dla jednego zbioru w porównaniu z innym. W przeciwieństwie do części wspólnej, która znajduje wspólne elementy, różnica uwydatnia to, co odróżnia jeden zbiór od drugiego.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który zarządza systemem zarządzania projektami, identyfikując zadania zaplanowane, ale jeszcze niezakończone. Twój program powinien:

  1. Odczytać ciąg znaków reprezentujący nazwę projektu
  2. Odczytać wiele ciągów znaków reprezentujących zaplanowane zadania (dane wejściowe zakończą się, gdy otrzymasz "planned_done")
  3. Odczytać wiele ciągów znaków reprezentujących ukończone zadania (dane wejściowe zakończą się, gdy otrzymasz "completed_done")
  4. Utworzyć dwa oddzielne zbiory do przechowywania zaplanowanych i ukończonych zadań
  5. Użyć metody difference(), aby znaleźć zadania, które są zaplanowane, ale jeszcze nieukończone
  6. Wypisać analizę statusu projektu w dokładnym formacie pokazanym poniżej

Na przykład, jeśli nazwa projektu to "Website Launch", zaplanowane zadania to "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site", a ukończone zadania to "Design mockups", "Setup database", program powinien wypisać:

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

Jeśli nazwa projektu to "Mobile App Development", zaplanowane zadania to "Create wireframes", "Develop UI", "Implement features", a ukończone zadania to "Create wireframes", "Develop UI", "Implement features", program powinien wypisać:

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

Jeśli nazwa projektu to "Marketing Campaign", zaplanowane zadania to "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results", a ukończone zadania to "Research target audience", program powinien wypisać:

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

Twój program musi użyć metody difference(), aby znaleźć zadania występujące w zbiorze zaplanowanych zadań, ale nie w zbiorze ukończonych zadań. Oblicz procentowy postęp, dzieląc liczbę ukończonych zadań przez łączną liczbę zaplanowanych zadań, a następnie mnożąc przez 100; wynik zaokrąglij do 1 miejsca po przecinku. Jeśli wszystkie zadania są ukończone, wyświetl jako status "Project completed successfully", w przeciwnym razie wyświetl "Project in progress - X task(s) remaining", gdzie X oznacza liczbę pozostałych zadań.

Spróbuj swoich sił

import 'dart:io';

void main() {
  // Wczytaj nazwę projektu
  String? projectName = stdin.readLineSync();
  
  // Wczytuj zaplanowane zadania aż do "planned_done"
  Set<String> plannedTasks = <String>{};
  String? task;
  while ((task = stdin.readLineSync()) != "planned_done") {
    if (task != null) {
      plannedTasks.add(task);
    }
  }
  
  // Wczytuj ukończone zadania aż do "completed_done"
  Set<String> completedTasks = <String>{};
  while ((task = stdin.readLineSync()) != "completed_done") {
    if (task != null) {
      completedTasks.add(task);
    }
  }
  
  // TODO: Napisz swój kod poniżej
  // Użyj metody difference(), aby znaleźć pozostałe zadania
  // Oblicz procentowy postęp
  // Określ status projektu
  
  // Wyświetl wyniki
  print("Project: $projectName");
  print("Planned tasks: $plannedTasks");
  print("Completed tasks: $completedTasks");
  // Dodaj tutaj pozostałe instrukcje wyświetlania
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Dart online