From 041a42462c1bb08ee1fd21a925022b6b383d2a67 Mon Sep 17 00:00:00 2001 From: Noy Shabtay <70848358+noyshabtay@users.noreply.github.com> Date: Wed, 31 Jan 2024 11:58:46 +0200 Subject: [PATCH] Added nil checks to sets union and intersect operations (#50) --- datastructures/set.go | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/datastructures/set.go b/datastructures/set.go index 5f7c6df..8ac5dad 100644 --- a/datastructures/set.go +++ b/datastructures/set.go @@ -58,28 +58,34 @@ func (set *Set[T]) ToSlice() []T { return slice } -func (setA *Set[T]) Intersect(setB *Set[T]) *Set[T] { - intersectedSet := MakeSet[T]() - bigSet, smallSet := setB, setA - if setA.Size() > setB.Size() { - bigSet, smallSet = setA, setB +func (set *Set[T]) Intersect(setB *Set[T]) *Set[T] { + intersectSet := MakeSet[T]() + if setB == nil { + return intersectSet + } + bigSet, smallSet := setB, set + if set.Size() > setB.Size() { + bigSet, smallSet = set, setB } for key := range smallSet.container { if bigSet.Exists(key) { - intersectedSet.Add(key) + intersectSet.Add(key) } } - return intersectedSet + return intersectSet } -func (setA *Set[T]) Union(setB *Set[T]) *Set[T] { - unionedSet := MakeSet[T]() - for key := range setA.container { - unionedSet.Add(key) +func (set *Set[T]) Union(setB *Set[T]) *Set[T] { + if setB == nil { + return set + } + unionSet := MakeSet[T]() + for key := range set.container { + unionSet.Add(key) } for key := range setB.container { - unionedSet.Add(key) + unionSet.Add(key) } - return unionedSet + return unionSet }