go 中自带的标准库只有map
,而没有set
,那么我们可以利用 map
和 struct{}
size 为0 来简单实现一个 set
package main
import "fmt"
type Set map[string]struct{}
func NewSet() Set {
s := make(map[string]struct{})
return Set(s)
}
func NewSetWithInitSize(size int) Set {
s := make(map[string]struct{}, size)
return Set(s)
}
func (s Set) Has(key string) bool {
_, exist := s[key]
return exist
}
func (s Set) Add(key string) {
s[key] = struct{}{}
}
func (s Set) Delete(key string) {
delete(s, key)
}
func main() {
s := NewSet()
s.Add("hello")
s.Add("world")
s.Add("go")
exist := s.Has("hello")
if exist {
fmt.Println("exist")
}
exist = s.Has("world")
if exist {
fmt.Println("exist")
}
s.Delete("go")
exist = s.Has("go")
if exist {
fmt.Println("exist")
} else {
fmt.Println("not exist")
}
}
更加完备的set,使用开源库:golang-set
网友评论