| | 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 |
| | } |
| |
|