0 Tage Serie
go / intermediate
Snippet

Erstellen von benutzerdefinierten Sets mit leeren Struct-Maps

Da Go keine integrierte Set-Sammlung anbietet, implementieren Entwickler diese mithilfe einer Map. Durch die Verwendung von struct{} als Werttyp verbrauchen wir 0 Byte Speicherplatz für die Werte, was es sehr speichereffizient macht.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main
import "fmt"
type Set struct {
data map[string]struct{}
}
func NewSet() *Set {
return &Set{data: make(map[string]struct{})}
}
func (s *Set) Add(item string) {
s.data[item] = struct{}{}
}
func (s *Set) Has(item string) bool {
_, exists := s.data[item]
return exists
}
func main() {
s := NewSet()
s.Add("golang")
fmt.Println("Contains golang:", s.Has("golang"))
}
Erklärung
1
data map[string]struct{}
Verwendet Map-Schlüssel für Set-Elemente und ein leeres Struct als 0-Byte-Wert.
2
s.data[item] = struct{}{}
Fügt ein Element zur Map hinzu und nutzt struct{}{}, um keinen Speicher für den Map-Wert zu verbrauchen.
3
_, exists := s.data[item]
Prüft die Mitgliedschaft des Schlüssels in der Map mittels Comma-Ok-Idiom.