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.
Wyzwanie
ŁatwyUtwórz program, który zarządza systemem zarządzania projektami, identyfikując zadania zaplanowane, ale jeszcze niezakończone. Twój program powinien:
- Odczytać ciąg znaków reprezentujący nazwę projektu
- Odczytać wiele ciągów znaków reprezentujących zaplanowane zadania (dane wejściowe zakończą się, gdy otrzymasz
"planned_done") - Odczytać wiele ciągów znaków reprezentujących ukończone zadania (dane wejściowe zakończą się, gdy otrzymasz
"completed_done") - Utworzyć dwa oddzielne zbiory do przechowywania zaplanowanych i ukończonych zadań
- Użyć metody
difference(), aby znaleźć zadania, które są zaplanowane, ale jeszcze nieukończone - 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) remainingJeś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 successfullyJeś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) remainingTwó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
}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
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online