package set
type Set[T comparable] struct {
m map[T]struct{}
}
func (s *Set[T]) Add(t T) {
if s.m == nil {
s.m = make(map[T]struct{})
}
s.m[t] = struct{}{}
}
func (s *Set[T]) Remove(t T) {
delete(s.m, t)
}
func (s *Set[T]) Exists(t T) bool {
_, ok := s.m[t]
return ok
}
func (s *Set[T]) List() []T {
l := make([]T, len(s.m))
var i int
for k := range s.m {
l[i] = k
i++
}
return l
}
func (s *Set[T]) ForEach(f func(T)) {
for k, _ := range s.m {
f(k)
}
}
2. 使用
package main
import (
"fmt"
"go1.1/set"
)
func main() {
s := set.Set[int]{}
s.Add(1)
s.Add(2)
s.Add(3)
s.Add(4)
s.Add(5)
l := s.List()
fmt.Println(l)
s.Remove(2)
l = s.List()
fmt.Println(l)
fmt.Println(s.Exists(3))
s.ForEach(func(v int) {
fmt.Println(v)
})
}