package map_set import ( "sort" "golang.org/x/exp/constraints" ) func New[T comparable](slice ...T) map[T]struct{} { mapSet := make(map[T]struct{}, len(slice)) for _, element := range slice { mapSet[element] = struct{}{} } return mapSet } func In[T comparable](needle T, haystack map[T]struct{}) bool { _, exists := haystack[needle] return exists } func Keys[T comparable](mapSet map[T]struct{}) []T { slice := make([]T, 0, len(mapSet)) for k := range mapSet { slice = append(slice, k) } return slice } func Sort[T constraints.Ordered](mapSet map[T]struct{}) []T { keys := Keys(mapSet) sort.Slice(keys, func(i, j int) bool { return keys[i] < keys[j] }) return keys }