package main // Unique array data structure type uniq_arr[T comparable] struct { backingMap map[T]struct{} // Map is used to check if element exists - Empty structs occupy zero memory } func new_uniq_arr[T comparable]() uniq_arr[T] { return uniq_arr[T]{ make(map[T]struct{}), } } func (s *uniq_arr[T]) add(vals ...T) { for _, item := range vals { if !s.contains(item) { s.backingMap[item] = struct{}{} } } return } func (s uniq_arr[T]) contains(val T) bool { _, ok := s.backingMap[val] return ok } func (s *uniq_arr[T]) delete(val T) { delete(s.backingMap, val) } func (s uniq_arr[T]) values() []T { toRet := make([]T, len(s.backingMap)) i := 0 for k := range s.backingMap { toRet[i] = k i++ } return toRet }