Maps als Sets
Maps für eindeutige Werte verwenden
Maps als Sets ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Go hat keinen Set-Typ
Go verfügt über keinen integrierten Set-Typ. Der idiomatische Weg, eine Menge eindeutiger Werte abzubilden, ist eine Map, deren Schlüssel die Elemente der Menge sind.
Map mit booleschen Werten
Ein Ansatz ist map[string]bool. Das Vorhandensein eines Schlüssels (und der Wert true) bedeutet, dass das Element in der Menge enthalten ist.
package main
import "fmt"
func main() {
set := map[string]bool{}
set["apple"] = true
set["banana"] = true
fmt.Println(set)
}Mitgliedschaft prüfen
Verwenden Sie Komma-ok oder lesen Sie den booleschen Wert direkt, um die Mitgliedschaft zu prüfen.
package main
import "fmt"
func main() {
set := map[string]bool{"apple": true}
fmt.Println(set["apple"])
fmt.Println(set["cherry"])
}Map mit leeren Structs
Eine speichereffizientere Menge verwendet map[string]struct{}. Ein leeres Struct benötigt null Bytes, daher speichern Sie nur die Schlüssel.
package main
import "fmt"
func main() {
set := map[string]struct{}{}
set["x"] = struct{}{}
_, ok := set["x"]
fmt.Println("x in set:", ok)
}Warum ein leeres Struct
In einer Menge ist der Wert nie relevant, sondern nur der Schlüssel. struct{}{} signalisiert, dass Sie die Werte ignorieren möchten, und benötigt pro Eintrag keinen zusätzlichen Speicher.
Elemente hinzufügen
Das Hinzufügen eines doppelten Schlüssels hat keine Wirkung, sodass die Menge auf natürliche Weise Eindeutigkeit sicherstellt.
package main
import "fmt"
func main() {
set := map[string]struct{}{}
set["a"] = struct{}{}
set["a"] = struct{}{}
fmt.Println("size:", len(set))
}Duplikate entfernen
Ein klassischer Anwendungsfall: Duplikate aus einem Slice entfernen. Fügen Sie jedes Element einer Menge hinzu und lesen Sie anschließend die eindeutigen Schlüssel zurück.
package main
import "fmt"
func main() {
input := []string{"a", "b", "a", "c", "b"}
set := map[string]struct{}{}
for _, v := range input {
set[v] = struct{}{}
}
fmt.Println("unique count:", len(set))
}Einen eindeutigen Slice erstellen
Kombinieren Sie die Menge mit einem Ergebnisslice, um die Reihenfolge des ersten Auftretens beizubehalten und gleichzeitig Duplikate zu entfernen.
package main
import "fmt"
func main() {
input := []int{1, 2, 1, 3, 2}
seen := map[int]struct{}{}
result := []int{}
for _, v := range input {
if _, ok := seen[v]; !ok {
seen[v] = struct{}{}
result = append(result, v)
}
}
fmt.Println(result)
}Schnittmenge von Mengen
Um die gemeinsamen Elemente zweier Mengen zu finden, durchlaufen Sie eine Menge und behalten die Elemente, die in der anderen vorhanden sind.
package main
import "fmt"
func main() {
a := map[int]struct{}{1: {}, 2: {}, 3: {}}
b := map[int]struct{}{2: {}, 3: {}, 4: {}}
for k := range a {
if _, ok := b[k]; ok {
fmt.Println("common:", k)
}
}
}Aus einer Menge entfernen
Verwenden Sie delete, um ein Element aus der Menge zu entfernen.
package main
import "fmt"
func main() {
set := map[string]struct{}{"a": {}, "b": {}}
delete(set, "a")
_, ok := set["a"]
fmt.Println("a in set:", ok)
}bool oder struct{} auswählen
Beides funktioniert. Verwenden Sie map[T]bool, wenn die Lesbarkeit von set[x] als booleschem Wert hilfreich ist. Verwenden Sie map[T]struct{}, wenn Sie signalisieren möchten, dass der Wert irrelevant ist, und bei großen Mengen Speicher sparen wollen.
Kurztest
Warum wird map[string]struct{} für Mengen häufig gegenüber map[string]bool bevorzugt?
Zusammenfassung
Maps als Mengen:
- Go hat keinen Set-Typ; verwenden Sie eine Map, deren Schlüssel die Elemente sind
map[T]boolodermap[T]struct{}- Ideal für das Entfernen von Duplikaten und das Prüfen der Mitgliedschaft
Häufig gestellte Fragen
Ist die Lektion „Maps als Sets“ kostenlos?
Ja — der vollständige Text von „Maps als Sets“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Maps als Sets“?
Maps für eindeutige Werte verwenden Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Maps als Sets“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Map-Interna
- Existenz prüfen
- Maps als Sets
- Iteration und Reihenfolge