Skip to content

Commit

Permalink
Set - make set from slice & add slice to set (#45)
Browse files Browse the repository at this point in the history
  • Loading branch information
omerzi authored Jan 8, 2024
1 parent 69aad24 commit acbc58d
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
14 changes: 14 additions & 0 deletions datastructures/set.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ func MakeSet[T comparable]() *Set[T] {
}
}

func MakeSetFromElements[T comparable](elements ...T) *Set[T] {
set := MakeSet[T]()
for _, element := range elements {
set.Add(element)
}
return set
}

func (set *Set[T]) Exists(key T) bool {
_, exists := set.container[key]
return exists
Expand All @@ -22,6 +30,12 @@ func (set *Set[T]) Add(key T) {
set.container[key] = struct{}{}
}

func (set *Set[T]) AddElements(elements ...T) {
for _, element := range elements {
set.Add(element)
}
}

func (set *Set[T]) Remove(key T) error {
_, exists := set.container[key]
if !exists {
Expand Down
10 changes: 10 additions & 0 deletions datastructures/set_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,13 @@ func TestSetToSlice(t *testing.T) {
assert.Contains(t, slice, 5)
assert.Contains(t, slice, 7)
}

func TestMakeSetFromElements(t *testing.T) {
intSlice := []int{1, 2, 3}
intSet := MakeSetFromElements(intSlice...)
assert.ElementsMatch(t, intSet.ToSlice(), intSlice)

stringSlice := []string{"frog", "frogger", "froggy"}
stringSet := MakeSetFromElements(stringSlice...)
assert.ElementsMatch(t, stringSet.ToSlice(), stringSlice)
}

0 comments on commit acbc58d

Please sign in to comment.