32 lines
531 B
Go
32 lines
531 B
Go
package utils
|
|
|
|
type Set[T comparable] interface {
|
|
Items() []T
|
|
// Union(set Set[T]) Set[T]
|
|
// Intersection(set Set[T]) Set[T]
|
|
// ContainsItem(item T) bool
|
|
// ContainsSubset(set Set[T]) bool
|
|
}
|
|
|
|
type set[T comparable] struct {
|
|
m map[T]bool
|
|
}
|
|
|
|
func (s *set[T]) Items() []T {
|
|
r := make([]T, len(s.m))
|
|
i := 0
|
|
for item, _ := range s.m {
|
|
r[i] = item
|
|
i += 1
|
|
}
|
|
return r
|
|
}
|
|
|
|
func NewSet[T comparable](items ...T) Set[T] {
|
|
m := make(map[T]bool, len(items))
|
|
for _, item := range items {
|
|
m[item] = true
|
|
}
|
|
return &set[T]{m}
|
|
}
|