diff --git a/datastructure/set/set.go b/datastructure/set/set.go index 2fcb7fe..771a032 100644 --- a/datastructure/set/set.go +++ b/datastructure/set/set.go @@ -10,6 +10,15 @@ func NewSet[T comparable](items ...T) Set[T] { return set } +// NewSetFromSlice create a set from slice +func NewSetFromSlice[T comparable](items []T) Set[T] { + set := make(Set[T]) + for _, item := range items { + set.Add(item) + } + return set +} + // Add items to set func (s Set[T]) Add(items ...T) { for _, v := range items { diff --git a/datastructure/set/set_test.go b/datastructure/set/set_test.go index 691f203..d16e354 100644 --- a/datastructure/set/set_test.go +++ b/datastructure/set/set_test.go @@ -6,6 +6,19 @@ import ( "github.com/duke-git/lancet/v2/internal" ) +func TestSet_NewSetFromSlice(t *testing.T) { + assert := internal.NewAssert(t, "TestSet_NewSetFromSlice") + + s1 := NewSetFromSlice([]int{1, 2, 2, 3}) + assert.Equal(3, s1.Size()) + assert.Equal(true, s1.Contain(1)) + assert.Equal(true, s1.Contain(2)) + assert.Equal(true, s1.Contain(3)) + + s2 := NewSetFromSlice([]int{}) + assert.Equal(0, s2.Size()) +} + func TestSet_Add(t *testing.T) { assert := internal.NewAssert(t, "TestSet_Add")