From 21dd6ab8aa67ab68e78af84020f2910b0819c8ce Mon Sep 17 00:00:00 2001 From: dudaodong Date: Fri, 1 Apr 2022 18:02:12 +0800 Subject: [PATCH] feat: add SymmetricDifference func for set --- datastructure/set/set.go | 18 ++++++++++++++++++ datastructure/set/set_test.go | 9 +++++++++ 2 files changed, 27 insertions(+) diff --git a/datastructure/set/set.go b/datastructure/set/set.go index 36bf254..53ab1d9 100644 --- a/datastructure/set/set.go +++ b/datastructure/set/set.go @@ -104,6 +104,24 @@ func (s Set[T]) Intersection(other Set[T]) Set[T] { return set } +// SymmetricDifference creates a new set whose element both be contained in set s and other +func (s Set[T]) SymmetricDifference(other Set[T]) Set[T] { + set := NewSet[T]() + s.Iterate(func(value T) { + if !other.Contain(value) { + set.Add(value) + } + }) + + other.Iterate(func(value T) { + if !s.Contain(value) { + set.Add(value) + } + }) + + 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]() diff --git a/datastructure/set/set_test.go b/datastructure/set/set_test.go index 3325f75..be11e68 100644 --- a/datastructure/set/set_test.go +++ b/datastructure/set/set_test.go @@ -128,6 +128,15 @@ func TestSet_Intersection(t *testing.T) { assert.Equal(expected, intersectionSet) } +func TestSet_SymmetricDifference(t *testing.T) { + assert := internal.NewAssert(t, "TestSet_SymmetricDifference") + + set1 := NewSet(1, 2, 3) + set2 := NewSet(2, 3, 4, 5) + + assert.Equal(NewSet(1, 4, 5), set1.SymmetricDifference(set2)) +} + func TestSet_Minus(t *testing.T) { assert := internal.NewAssert(t, "TestSet_Minus")