package types type Set[T comparable] struct { items map[T]struct{} } func NewSet[T comparable]() *Set[T] { return &Set[T]{ items: make(map[T]struct{}), } } func (s *Set[T]) Add(item T) { s.items[item] = struct{}{} } func (s *Set[T]) Remove(item T) { delete(s.items, item) } func (s *Set[T]) Contains(item T) bool { _, exists := s.items[item] return exists } func (s *Set[T]) Len() int { return len(s.items) } func (s *Set[T]) Items() []T { items := make([]T, 0, s.Len()) for item := range s.items { items = append(items, item) } return items }