46 lines
617 B
Go
46 lines
617 B
Go
package set
|
|
|
|
type Set[T comparable] map[T]bool
|
|
|
|
func (s *Set[T]) Add(items ...T) {
|
|
for _, item := range items {
|
|
(*s)[item] = true
|
|
}
|
|
}
|
|
|
|
func (s Set[T]) Has(item T) bool {
|
|
return s[item]
|
|
}
|
|
|
|
func (s *Set[T]) Remove(items ...T) {
|
|
for _, item := range items {
|
|
delete(*s, item)
|
|
}
|
|
}
|
|
|
|
func (s *Set[T]) Merge(o Set[T]) {
|
|
for item := range o {
|
|
s.Add(item)
|
|
}
|
|
}
|
|
|
|
func (s Set[T]) ToList() []T {
|
|
list := []T{}
|
|
|
|
for item := range s {
|
|
list = append(list, item)
|
|
}
|
|
|
|
return list
|
|
}
|
|
|
|
func New[T comparable](items ...T) Set[T] {
|
|
result := Set[T]{}
|
|
|
|
for _, item := range items {
|
|
result.Add(item)
|
|
}
|
|
|
|
return result
|
|
}
|