📌算法Go语言描述📌datastruct📌5_set.go
package datastruct

// 可以利用map的key不重复的特性来实现set

type Set[T comparable] struct {
	m map[T]struct{}
}

func NewSet[T comparable](items []T) *Set[T] {
	m := make(map[T]struct{})
	for _, item := range items {
		m[item] = struct{}{}
	}
	return &Set[T]{m: m}
}

func (s *Set[T]) Add(v T) {
	s.m[v] = struct{}{}
}

func (s *Set[T]) Remove(v T) {
	delete(s.m, v)
}

func (s *Set[T]) Clear() {
	clear(s.m)
}

func (s *Set[T]) Size() int {
	return len(s.m)
}

func (s *Set[T]) Has(v T) bool {
	_, ok := s.m[v]
	return ok
}

func (s *Set[T]) Items() []T {
	items := make([]T, 0, len(s.m))
	for item := range s.m {
		items = append(items, item)
	}
	return items
}