diff --git a/unique_array.go b/unique_array.go new file mode 100644 index 0000000..d9492d0 --- /dev/null +++ b/unique_array.go @@ -0,0 +1,28 @@ +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 + vals []T +} + +func new_uniq_arr[T comparable]() uniq_arr[T] { + return uniq_arr[T]{ + make(map[T]struct{}), + make([]T, 0), + } +} +func (s *uniq_arr[T]) add(vals ...T) { + for _, item := range vals { + if !s.contains(item) { + s.backingMap[item] = struct{}{} + s.vals = append(s.vals, item) + } + } + return +} + +func (s *uniq_arr[T]) contains(val T) bool { + _, ok := s.backingMap[val] + return ok +}