package types type Set[T comparable] struct { items map[T]struct{} } // NewSet 创建并返回一个新的 Set 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{}{} } // Remove 从 Set 中移除一个元素 func (s *Set[T]) Remove(item T) { delete(s.items, item) } // Contains 检查 Set 是否包含某个元素 func (s *Set[T]) Contains(item T) bool { _, exists := s.items[item] return exists } // Len 返回 Set 中元素的数量 func (s *Set[T]) Len() int { return len(s.items) } // Items 返回 Set 中所有元素组成的切片 // 注意:由于 map 的无序性,返回的切片元素顺序是随机的 func (s *Set[T]) Items() []T { items := make([]T, 0, s.Len()) for item := range s.items { items = append(items, item) } return items }