Menu
Coddy logo textTech

Usuwanie elementów ze zbioru

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 35 z 68.

Czasami trzeba usuwać elementy ze zbioru, a Go ułatwia to dzięki wbudowanej funkcji delete(). Ponieważ zbiór jest w rzeczywistości oparty na mapie, usuwanie elementu działa dokładnie tak samo jak usuwanie klucza z mapy.

Aby usunąć element ze zbioru, użyj funkcji delete(), podając swój zbiór i element, który chcesz usunąć:

delete(colors, "red")

Funkcja delete() przyjmuje dwa parametry: mapę (twój zbiór) i klucz, który chcesz usunąć. Jeśli element istnieje w zbiorze, zostaje usunięty. Jeśli element nie istnieje, funkcja nic nie robi — nie jest zgłaszany żaden błąd.

To zachowanie doskonale sprawdza się w przypadku zbiorów, ponieważ często chcesz mieć pewność, że danego elementu nie ma, niezależnie od tego, czy znajdował się tam początkowo. Operacja jest szybka i wydajna, dzięki czemu zachowuje zalety wydajnościowe wynikające z implementacji mapy używanej przez Go.

challenge icon

Wyzwanie

Łatwy

Stwórz system zarządzania książkami w bibliotece, który usuwa książki z kolekcji różnych gatunków, używając idiomu zbioru w Go. To wyzwanie pokazuje, jak używać funkcji delete() do usuwania elementów ze zbiorów i śledzenia procesu usuwania.

Otrzymasz dwa dane wejściowe:

  • Łańcuch znaków zawierający książki z kolekcji beletrystyki, rozdzielone przecinkami (np. "1984,Dune,Foundation,Neuromancer,Brave New World")
  • Łańcuch znaków zawierający książki do usunięcia, rozdzielone przecinkami (np. "Dune,Harry Potter,Foundation,Twilight,1984")

Twoim zadaniem jest:

  1. Utworzyć zbiór przy użyciu idiomu Go map[string]struct{}, aby przechowywać książki beletrystyczne
  2. Przeanalizować pierwszy łańcuch wejściowy, dzieląc go po przecinkach, aby uzyskać poszczególne tytuły książek
  3. Dodać każdą książkę do zbioru, używając pustego literału struktury {} jako wartości
  4. Przeanalizować drugi łańcuch wejściowy, dzieląc go po przecinkach, aby uzyskać listę książek do usunięcia
  5. Dla każdej książki do usunięcia sprawdzić, czy istnieje w zbiorze, używając idiomu comma ok
  6. Wyświetlić przebieg usuwania dla każdej przetwarzanej książki:
    • Jeśli książka istnieje w kolekcji: "Removing: [book_title]"
    • Jeśli książka nie istnieje w kolekcji: "Not found: [book_title]"
  7. Użyć funkcji delete(), aby usunąć książki istniejące w zbiorze
  8. Po przetworzeniu wszystkich żądań usunięcia wyświetlić podsumowanie:
    • "Initial collection size: [initial_count]"
    • "Removal requests: [requests_count]"
    • "Books successfully removed: [removed_count]"
    • "Books not found: [not_found_count]"
    • "Final collection size: [final_count]"
  9. Na koniec wyświetlić listę wszystkich pozostałych książek w kolekcji:
    • Nagłówek: "Remaining books in fiction collection:"
    • Każda książka w osobnym wierszu: "- [book_title]"
    • Jeśli nie pozostały żadne książki: "- Collection is empty"

Użyj pakietu strings, aby podzielić łańcuchy wejściowe po przecinkach. To wyzwanie pokazuje, jak funkcja delete() bezpiecznie usuwa elementy ze zbioru w Go i nie powoduje błędów nawet podczas próby usunięcia nieistniejących elementów, dzięki czemu świetnie nadaje się do operacji porządkowych.

Spróbuj swoich sił

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strings"
)

func main() {
	// Odczytaj dane wejściowe za pomocą Scanner, aby obsługiwać tytuły książek zawierające spacje
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	fictionBooks := scanner.Text()
	scanner.Scan()
	booksToRemove := scanner.Text()

	// Przeanalizuj ciągi wejściowe
	fictionList := strings.Split(fictionBooks, ",")
	removeList := strings.Split(booksToRemove, ",")

	// TODO: Napisz swój kod poniżej
	// 1. Utwórz zbiór za pomocą map[string]struct{} do przechowywania książek beletrystycznych
	// 2. Dodaj każdą książkę z fictionList do zbioru
	// 3. Przetwórz każdą książkę w removeList i sprawdź, czy istnieje
	// 4. Wyświetl przebieg usuwania i użyj funkcji delete()
	// 5. Wyświetl statystyki podsumowujące
	// 6. Wypisz pozostałe książki w kolekcji
	// Pamiętaj, aby posortować pozostałe książki, by zapewnić spójną kolejność wyników

	_ = sort.Strings // usuń ten wiersz, gdy zaczniesz używać sort
	_ = fmt.Println  // usuń ten wiersz, gdy zaczniesz używać fmt
}
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 Go online