39 lines
598 B
Go
39 lines
598 B
Go
package utils
|
|
|
|
type void struct{}
|
|
|
|
type Set[T comparable] struct {
|
|
setMap map[T]void
|
|
}
|
|
|
|
func NewSet[T comparable](eles ...T) *Set[T] {
|
|
set := &Set[T]{setMap: make(map[T]void)}
|
|
set.AddAll(eles...)
|
|
return set
|
|
}
|
|
|
|
func (set *Set[T]) Add(ele T) *Set[T] {
|
|
set.setMap[ele] = void{}
|
|
return set
|
|
}
|
|
|
|
func (set *Set[T]) AddAll(eles ...T) *Set[T] {
|
|
for _, ele := range eles {
|
|
set.Add(ele)
|
|
}
|
|
return set
|
|
}
|
|
|
|
func (set *Set[T]) Delete(ele T) *Set[T] {
|
|
delete(set.setMap, ele)
|
|
return set
|
|
}
|
|
|
|
func (set *Set[T]) ToSlice() []T {
|
|
var s []T
|
|
for k, _ := range set.setMap {
|
|
s = append(s, k)
|
|
}
|
|
return s
|
|
}
|