Dodawanie i usuwanie elementów ze zbiorów
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 19 z 65.
Gdy masz już Set, często trzeba modyfikować jego zawartość, dodając nowe elementy lub usuwając istniejące. Metody add() i remove() pozwalają w prosty sposób zarządzać elementami zbioru.
Metoda add() próbuje wstawić nowy element do zbioru. Jednak ponieważ zbiory przechowują tylko unikalne wartości, jeśli spróbujesz dodać element, który już istnieje, metoda po prostu nic nie robi — nie występuje żaden błąd, a zbiór pozostaje bez zmian.
Set<String> usernames = {'alice', 'bob', 'charlie'};
usernames.add('diana'); // Pomyślnie dodaje 'diana'
usernames.add('alice'); // Nic nie robi — 'alice' już istnieje
print(usernames); // {alice, bob, charlie, diana}Metoda remove() działa, pobierając wartość, którą chcesz usunąć, i usuwając ją ze zbioru. Jeśli element nie istnieje w zbiorze, metoda po prostu nic nie robi, dzięki czemu można jej bezpiecznie używać bez wcześniejszego sprawdzania.
usernames.remove('bob'); // Usuwa 'bob'
usernames.remove('unknown'); // Nic nie robi – nie znaleziono elementu
print(usernames); // {alice, charlie, diana}Wyzwanie
ŁatwyUtwórz program, który zarządza systemem współpracy zespołowej, dodając nowych członków zespołu i usuwając nieaktywnych członków z zespołu projektowego. Twój program powinien:
- Odczytać ciąg znaków reprezentujący nazwę projektu
- Odczytać wiele ciągów znaków reprezentujących początkowych członków zespołu (wprowadzanie zakończy się, gdy otrzymasz
"initial_done") - Odczytać wiele ciągów znaków reprezentujących nowych członków do dodania (wprowadzanie zakończy się, gdy otrzymasz
"add_done") - Odczytać wiele ciągów znaków reprezentujących członków do usunięcia (wprowadzanie zakończy się, gdy otrzymasz
"remove_done") - Utworzyć Set z początkowych członków zespołu
- Użyć metody
add(), aby dodać każdego nowego członka do zespołu - Użyć metody
remove(), aby usunąć z zespołu każdego wskazanego członka - Wypisać wyniki zarządzania zespołem w dokładnym formacie pokazanym poniżej
Na przykład, jeśli nazwa projektu to "Mobile App Development", początkowi członkowie to "Alice", "Bob", "Charlie", nowi członkowie do dodania to "Diana", "Alice", "Eve", a członkowie do usunięcia to "Bob", "Frank", program powinien wypisać:
Project: Mobile App Development
Initial team: {Alice, Bob, Charlie}
Adding new members: [Diana, Alice, Eve]
After adding members: {Alice, Bob, Charlie, Diana, Eve}
Removing members: [Bob, Frank]
Final team: {Alice, Charlie, Diana, Eve}
Team size: 4
Status: Team updated successfullyJeśli nazwa projektu to "Website Redesign", początkowi członkowie to "John", "Sarah", nowi członkowie do dodania to "Mike", "John", a członkowie do usunięcia to "Sarah", "Unknown", program powinien wypisać:
Project: Website Redesign
Initial team: {John, Sarah}
Adding new members: [Mike, John]
After adding members: {John, Sarah, Mike}
Removing members: [Sarah, Unknown]
Final team: {John, Mike}
Team size: 2
Status: Team updated successfullyJeśli nazwa projektu to "Data Analysis", początkowym członkiem jest "Emma", nowi członkowie do dodania to "Tom", "Lisa", a członkiem do usunięcia jest "Emma", program powinien wypisać:
Project: Data Analysis
Initial team: {Emma}
Adding new members: [Tom, Lisa]
After adding members: {Emma, Tom, Lisa}
Removing members: [Emma]
Final team: {Tom, Lisa}
Team size: 2
Status: Team updated successfullyTwój program musi pokazać, że metoda add() nic nie robi, gdy próbuje się dodać członka, który już istnieje, oraz że metoda remove() nic nie robi, gdy próbuje się usunąć członka, który nie istnieje. Zapisz listy wejściowe, aby pokazać, jakie operacje podjęto, a następnie pokaż zawartość Set po każdej operacji, aby zademonstrować unikalny charakter zbiorów Set.
Spróbuj swoich sił
import 'dart:io';
void main() {
// Wczytaj nazwę projektu
String? projectName = stdin.readLineSync();
// Wczytaj początkowych członków zespołu
List<String> initialMembers = [];
String? member;
while ((member = stdin.readLineSync()) != "initial_done") {
initialMembers.add(member!);
}
// Wczytaj nowych członków do dodania
List<String> membersToAdd = [];
while ((member = stdin.readLineSync()) != "add_done") {
membersToAdd.add(member!);
}
// Wczytaj członków do usunięcia
List<String> membersToRemove = [];
while ((member = stdin.readLineSync()) != "remove_done") {
membersToRemove.add(member!);
}
// TODO: Napisz swój kod poniżej
// Utwórz Set z początkowymi członkami zespołu
// Dodaj nowych członków za pomocą metody add()
// Usuń członków za pomocą metody remove()
// Wyświetl wyniki w wymaganym formacie
print("Project: $projectName");
// 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