46 lines
724 B
Go
46 lines
724 B
Go
package set
|
|
|
|
var exists = struct{}{}
|
|
|
|
type stringSet struct {
|
|
m map[string]struct{}
|
|
}
|
|
|
|
func NewStringSet() *stringSet {
|
|
s := &stringSet{}
|
|
s.m = make(map[string]struct{})
|
|
return s
|
|
}
|
|
|
|
func (s *stringSet) Add(value string) {
|
|
s.m[value] = exists
|
|
}
|
|
|
|
func (s *stringSet) AddValues(values []string) {
|
|
for _, v := range values {
|
|
s.Add(v)
|
|
}
|
|
}
|
|
|
|
func (s *stringSet) Remove(value string) {
|
|
delete(s.m, value)
|
|
}
|
|
|
|
func (s *stringSet) RemoveValues(values []string) {
|
|
for _, v := range values {
|
|
s.Remove(v)
|
|
}
|
|
}
|
|
|
|
func (s *stringSet) Contains(value string) bool {
|
|
_, c := s.m[value]
|
|
return c
|
|
}
|
|
|
|
func (s *stringSet) ToSlice() []string {
|
|
r := make([]string, 0, len(s.m))
|
|
for k := range s.m {
|
|
r = append(r, k)
|
|
}
|
|
return r
|
|
}
|