0Pricing
Go Academy · Lektion

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]bool oder map[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

  1. Map-Interna
  2. Existenz prüfen
  3. Maps als Sets
  4. Iteration und Reihenfolge
← Zurück zu Go Academy