From f28b5b2f92719b6ae7ae7ceb90aa0ee4275ec97f Mon Sep 17 00:00:00 2001 From: dudaodong Date: Fri, 1 Apr 2022 16:44:25 +0800 Subject: [PATCH] feat: add Minus func for set --- datastructure/set/set.go | 13 +++++++++++++ datastructure/set/set_test.go | 11 +++++++++++ 2 files changed, 24 insertions(+) diff --git a/datastructure/set/set.go b/datastructure/set/set.go index 57b1299..36bf254 100644 --- a/datastructure/set/set.go +++ b/datastructure/set/set.go @@ -103,3 +103,16 @@ func (s Set[T]) Intersection(other Set[T]) Set[T] { return set } + +// Minus creates an set of whose element in origin set but not in compared set +func (s Set[T]) Minus(comparedSet Set[T]) Set[T] { + set := NewSet[T]() + + s.Iterate(func(value T) { + if !comparedSet.Contain(value) { + set.Add(value) + } + }) + + return set +} diff --git a/datastructure/set/set_test.go b/datastructure/set/set_test.go index 3aa0e19..ceeb943 100644 --- a/datastructure/set/set_test.go +++ b/datastructure/set/set_test.go @@ -127,3 +127,14 @@ func TestSet_Intersection(t *testing.T) { assert.Equal(expected, intersectionSet) } + +func TestSet_Minus(t *testing.T) { + assert := internal.NewAssert(t, "TestSet_Intersection") + + set1 := NewSet(1, 2, 3) + set2 := NewSet(2, 3, 4, 5) + set3 := NewSet(2, 3) + + assert.Equal(NewSet(1), set1.Minus(set2)) + assert.Equal(NewSet(4, 5), set2.Minus(set3)) +}