Menu
Coddy logo textTech

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}
challenge icon

Wyzwanie

Łatwy

Utwó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:

  1. Odczytać ciąg znaków reprezentujący nazwę projektu
  2. Odczytać wiele ciągów znaków reprezentujących początkowych członków zespołu (wprowadzanie zakończy się, gdy otrzymasz "initial_done")
  3. Odczytać wiele ciągów znaków reprezentujących nowych członków do dodania (wprowadzanie zakończy się, gdy otrzymasz "add_done")
  4. Odczytać wiele ciągów znaków reprezentujących członków do usunięcia (wprowadzanie zakończy się, gdy otrzymasz "remove_done")
  5. Utworzyć Set z początkowych członków zespołu
  6. Użyć metody add(), aby dodać każdego nowego członka do zespołu
  7. Użyć metody remove(), aby usunąć z zespołu każdego wskazanego członka
  8. 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 successfully

Jeś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 successfully

Jeś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 successfully

Twó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
}
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