aoc-2022/utils/set.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}
}