feat: article: finish base functions
This commit is contained in:
38
utils/set.go
Normal file
38
utils/set.go
Normal file
@@ -0,0 +1,38 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user