From 1782b11ec414d6f8ff8aa2cdb09525a11e8e7cb6 Mon Sep 17 00:00:00 2001 From: dudaodong Date: Mon, 18 Jul 2022 15:33:45 +0800 Subject: [PATCH] refactor: refact Intersection function --- slice/slice.go | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/slice/slice.go b/slice/slice.go index 30bcefd..6b113ca 100644 --- a/slice/slice.go +++ b/slice/slice.go @@ -653,14 +653,20 @@ func Intersection[T comparable](slices ...[]T) []T { var res []T - reducer := func(s1, s2 []T) []T { - s := make([]T, 0, 0) - for _, v := range s1 { - if Contain(s2, v) { - s = append(s, v) + reducer := func(sliceA, sliceB []T) []T { + hashMap := make(map[T]int) + for _, val := range sliceA { + hashMap[val] = 1 + } + + out := make([]T, 0) + for _, val := range sliceB { + if v, ok := hashMap[val]; v == 1 && ok { + out = append(out, val) + hashMap[val]++ } } - return s + return out } res = reducer(slices[0], slices[1]) @@ -672,7 +678,7 @@ func Intersection[T comparable](slices ...[]T) []T { res = reducer(reduceSlice[0], reduceSlice[1]) } - return Unique(res) + return res } // SymmetricDifference oppoiste operation of intersection function