Maps als sets
Gebruik maps voor unieke waarden
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]boolofmap[T]struct{}- Ideaal voor het verwijderen van dubbele elementen en het controleren van lidmaatschap
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.