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.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachErstellen Sie ein Bibliotheksbuch-Verwaltungssystem, das Bücher aus verschiedenen Genre-Sammlungen mithilfe des Go-Set-Idioms entfernt. Diese Herausforderung zeigt, wie man die Funktion delete() verwendet, um Elemente aus Sets zu entfernen, während der Entfernungsprozess verfolgt wird.
Sie erhalten zwei Eingaben:
- Einen String, der Bücher in der Fiction-Sammlung enthält, getrennt durch Kommas (z. B.
"1984,Dune,Foundation,Neuromancer,Brave New World") - Einen String, der zu entfernende Bücher enthält, getrennt durch Kommas (z. B.
"Dune,Harry Potter,Foundation,Twilight,1984")
Ihre Aufgabe ist es:
- Erstellen Sie ein Set mit dem Go-Idiom
map[string]struct{}, um die Fiction-Bücher zu speichern - Verarbeiten Sie den ersten Eingabestring, indem Sie ihn an den Kommas aufteilen, um die einzelnen Buchtitel zu erhalten
- Fügen Sie jedes Buch Ihrem Set hinzu, indem Sie das leere Struct-Literal
{}als Wert verwenden - Verarbeiten Sie den zweiten Eingabestring, indem Sie ihn an den Kommas aufteilen, um die Liste der zu entfernenden Bücher zu erhalten
- Prüfen Sie für jedes zu entfernende Buch mithilfe des "comma ok"-Idioms, ob es im Set vorhanden ist
- Zeigen Sie den Entfernungsprozess für jedes verarbeitete Buch an:
- Wenn das Buch in der Sammlung existiert:
"Removing: [book_title]" - Wenn das Buch nicht in der Sammlung existiert:
"Not found: [book_title]"
- Wenn das Buch in der Sammlung existiert:
- Verwenden Sie die Funktion
delete(), um Bücher zu entfernen, die im Set vorhanden sind - Zeigen Sie nach der Bearbeitung aller Entfernungsanfragen eine Zusammenfassung an:
"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]"
- Listen Sie abschließend alle verbleibenden Bücher in der Sammlung auf:
- Header:
"Remaining books in fiction collection:" - Jedes Buch in einer eigenen Zeile:
"- [book_title]" - Wenn keine Bücher übrig sind:
"- Collection is empty"
- Header:
Verwenden Sie das Paket strings, um die Eingabestrings an den Kommas aufzuteilen. Diese Herausforderung zeigt, wie die Funktion delete() Elemente sicher aus einem Go-Set entfernt, wobei keine Fehler ausgelöst werden, selbst wenn versucht wird, nicht vorhandene Elemente zu entfernen, was sie perfekt für Bereinigungsoperationen macht.
Spickzettel
Um Elemente aus einem Set in Go zu entfernen, verwenden Sie die integrierte delete() Funktion:
delete(colors, "red")Die delete() Funktion nimmt zwei Parameter entgegen: die Map (Ihr Set) und den Schlüssel, den Sie entfernen möchten. Wenn das Element existiert, wird es entfernt. Wenn es nicht existiert, macht die Funktion nichts – es wird kein Fehler ausgelöst.
Dies macht delete() perfekt für Sets, da man oft sicherstellen möchte, dass ein Element nicht vorhanden ist, unabhängig davon, ob es ursprünglich da war.
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