Go Academy · Les

Maps als sets

Gebruik maps voor unieke waarden

Les 3 van 413 stappen

Maps als sets is een gratis Go Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Go Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Go Academy bevat in totaal 4 lessen.

Go heeft geen type voor verzamelingen

Go heeft geen ingebouwd type voor een verzameling. De idiomatische manier om een verzameling unieke waarden weer te geven, is een map te gebruiken waarvan de sleutels de elementen van de verzameling zijn.

Map met bool-waarden

Een aanpak is map[string]bool. De aanwezigheid van een sleutel (en de waarde true) betekent dat het element in de verzameling zit.

package main

import "fmt"

func main() {
	set := map[string]bool{}
	set["apple"] = true
	set["banana"] = true
	fmt.Println(set)
}

Lidmaatschap controleren

Gebruik komma-ok of lees de boolean rechtstreeks om te controleren of een element deel uitmaakt van de verzameling.

package main

import "fmt"

func main() {
	set := map[string]bool{"apple": true}
	fmt.Println(set["apple"])
	fmt.Println(set["cherry"])
}

Map met lege structs

Een geheugenefficiëntere verzameling gebruikt map[string]struct{}. Een lege struct neemt nul bytes in beslag, dus je slaat alleen sleutels op.

package main

import "fmt"

func main() {
	set := map[string]struct{}{}
	set["x"] = struct{}{}
	_, ok := set["x"]
	fmt.Println("x in set:", ok)
}

Waarom een lege struct

De waarde is in een verzameling nooit van belang; alleen de sleutel telt. struct{}{} geeft aan dat je de waarden wilt negeren en gebruikt geen extra geheugen per vermelding.

Elementen toevoegen

Een dubbele sleutel toevoegen heeft geen effect, dus de verzameling dwingt vanzelf uniciteit af.

package main

import "fmt"

func main() {
	set := map[string]struct{}{}
	set["a"] = struct{}{}
	set["a"] = struct{}{}
	fmt.Println("size:", len(set))
}

Dubbele elementen verwijderen

Een klassiek gebruik: dubbele elementen uit een slice verwijderen. Voeg elk element toe aan een verzameling en lees daarna de unieke sleutels uit.

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))
}

Een unieke slice opbouwen

Combineer de verzameling met een resultaatslice om de volgorde waarin elementen voor het eerst zijn gezien te behouden en dubbele elementen te verwijderen.

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)
}

Doorsnede van verzamelingen

Om de elementen te vinden die in twee verzamelingen voorkomen, loop je door de ene verzameling en behoud je de elementen die in de andere aanwezig zijn.

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)
		}
	}
}

Uit een verzameling verwijderen

Gebruik delete om een element uit de verzameling te verwijderen.

package main

import "fmt"

func main() {
	set := map[string]struct{}{"a": {}, "b": {}}
	delete(set, "a")
	_, ok := set["a"]
	fmt.Println("a in set:", ok)
}

Kiezen tussen bool en struct{}

Beide werken. Gebruik map[T]bool wanneer de leesbaarheid van set[x] als bool helpt. Gebruik map[T]struct{} wanneer je wilt aangeven dat de waarde niet relevant is en je geheugen wilt besparen in grote verzamelingen.

Snelle controle

Waarom heeft map[string]struct{} voor verzamelingen vaak de voorkeur boven map[string]bool?

Samenvatting

Maps als verzamelingen:

  • Go heeft geen type voor verzamelingen; gebruik een map met de elementen als sleutels
  • map[T]bool of map[T]struct{}
  • Ideaal voor het verwijderen van dubbele elementen en het controleren van lidmaatschap
Gratis beginnen

Leer Go met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
51
Lessen
203

Veelgestelde vragen

Is de les “Maps als sets” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Go Academy, waaronder “Maps als sets”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Go Academy bevat in totaal 4 lessen.

Wat leer ik in “Maps als sets”?

Gebruik maps voor unieke waarden Je oefent met Go Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Go Academy te beginnen?

Ervaring vooraf is niet nodig. Go Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Maps als sets”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Go Academy?

Ja. Elke les over Go Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Interne werking van maps
  2. Bestaan controleren
  3. Maps als sets
  4. Iteratie en ordening
← Terug naar Go Academy