package utils type void struct{} // This is set with generic 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 }