Aus einem Set entfernen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 35 von 68.
Manchmal müssen Sie Elemente aus Ihrem Set entfernen, und Go macht dies mit der integrierten delete()-Funktion ganz einfach. Da Ihr Set im Grunde eine Map ist, funktioniert das Entfernen eines Elements genau wie das Entfernen eines Schlüssels aus einer Map.
Um ein Element aus Ihrem Set zu entfernen, verwenden Sie die Funktion delete() mit Ihrem Set und dem Element, das Sie entfernen möchten:
delete(colors, "red")Die Funktion delete() nimmt zwei Parameter entgegen: die Map (dein Set) und den Schlüssel, den du entfernen möchtest. Wenn das Element im Set vorhanden ist, wird es entfernt. Wenn das Element nicht existiert, macht die Funktion nichts – es wird kein Fehler ausgelöst.
Dieses Verhalten ist ideal für Sets, da man oft sicherstellen möchte, dass ein Element nicht vorhanden ist, unabhängig davon, ob es ursprünglich dort war. Die Operation ist schnell und effizient und behält die Leistungsvorteile der zugrunde liegenden Map-Implementierung von Go bei.
Aufgabe
EinfachErstelle ein Bibliotheksbuchverwaltungssystem, das Bücher aus verschiedenen Genresammlungen mithilfe des Go-Set-Idioms entfernt. Diese Herausforderung zeigt, wie die Funktion delete() verwendet wird, um Elemente aus Sets zu entfernen und dabei den Entfernungsvorgang zu verfolgen.
Du erhältst zwei Eingaben:
- Eine Zeichenkette mit Büchern aus der Belletristik-Sammlung, getrennt durch Kommas (z. B.
"1984,Dune,Foundation,Neuromancer,Brave New World") - Eine Zeichenkette mit den zu entfernenden Büchern, getrennt durch Kommas (z. B.
"Dune,Harry Potter,Foundation,Twilight,1984")
Deine Aufgabe ist es:
- Ein Set mit dem Go-Idiom
map[string]struct{}zu erstellen, um die Bücher der Belletristik-Sammlung zu speichern - Die erste Eingabezeichenkette durch Aufteilen an den Kommas zu analysieren, um einzelne Buchtitel zu erhalten
- Jedes Buch mithilfe des leeren Struct-Literals
{}als Wert zu deinem Set hinzuzufügen - Die zweite Eingabezeichenkette durch Aufteilen an den Kommas zu analysieren, um die Liste der zu entfernenden Bücher zu erhalten
- Für jedes zu entfernende Buch mithilfe des Komma-ok-Idioms zu prüfen, ob es im Set vorhanden ist
- Den Entfernungsvorgang für jedes verarbeitete Buch anzuzeigen:
- Wenn das Buch in der Sammlung vorhanden ist:
"Removing: [book_title]" - Wenn das Buch nicht in der Sammlung vorhanden ist:
"Not found: [book_title]"
- Wenn das Buch in der Sammlung vorhanden ist:
- Die Funktion
delete()zu verwenden, um Bücher zu entfernen, die im Set vorhanden sind - Nach der Verarbeitung aller Entfernungsanfragen eine Zusammenfassung anzuzeigen:
"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]"
- Zum Schluss alle verbleibenden Bücher in der Sammlung aufzulisten:
- Überschrift:
"Remaining books in fiction collection:" - Jedes Buch in einer eigenen Zeile:
"- [book_title]" - Wenn keine Bücher übrig bleiben:
"- Collection is empty"
- Überschrift:
Verwende das Paket strings, um die Eingabezeichenketten an den Kommas aufzuteilen. Diese Herausforderung zeigt, wie die Funktion delete() Elemente sicher aus einem Go-Set entfernt, ohne Fehler auszulösen, selbst wenn versucht wird, nicht vorhandene Elemente zu entfernen, wodurch sie sich ideal für Bereinigungsvorgänge eignet.
Probier es selbst
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
)
func main() {
// Eingabe mit Scanner lesen, um Buchtitel mit Leerzeichen zu unterstützen
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
fictionBooks := scanner.Text()
scanner.Scan()
booksToRemove := scanner.Text()
// Eingabe-Strings parsen
fictionList := strings.Split(fictionBooks, ",")
removeList := strings.Split(booksToRemove, ",")
// TODO: Schreiben Sie Ihren Code unten
// 1. Erstellen Sie ein Set mit map[string]struct{}, um Belletristik-Bücher zu speichern
// 2. Fügen Sie jedes Buch aus fictionList zum Set hinzu
// 3. Verarbeiten Sie jedes Buch in removeList und prüfen Sie, ob es existiert
// 4. Entfernungsprozess anzeigen und die Funktion delete() verwenden
// 5. Zusammenfassende Statistiken anzeigen
// 6. Verbleibende Bücher in der Sammlung auflisten
// Denken Sie daran, die verbleibenden Bücher für eine konsistente Ausgabe zu sortieren
_ = sort.Strings // Entfernen Sie diese Zeile, sobald Sie sort verwenden
_ = fmt.Println // Entfernen Sie diese Zeile, sobald Sie fmt verwenden
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und Verhalten6Idiomatisches Go: Sets
Das Set-Idiom in GoEin Set erstellenElemente zu einem Set hinzufügenPrüfen auf MitgliedschaftAus einem Set entfernenÜber ein Set iterierenZusammenfassung – Eindeutige BenutzernamenÜbe selbstständig: Online-Go-Compiler