File tree Expand file tree Collapse file tree 2 files changed +24
-2
lines changed Expand file tree Collapse file tree 2 files changed +24
-2
lines changed Original file line number Diff line number Diff line change @@ -260,9 +260,19 @@ func Clip[S ~[]E, E any](s S) S {
260
260
// Intersection finds elements that are present in both slices, returning new slice without duplicates
261
261
func Intersection [E comparable ](s1 , s2 []E ) []E {
262
262
var result []E
263
- for i := 0 ; i < len (s1 ); i ++ {
263
+ s2len := len (s2 )
264
+ s1len := len (s1 )
265
+ if s1len == 0 || s2len == 0 {
266
+ return result
267
+ }
268
+ s2Map := make (map [E ]bool , s2len )
269
+ for i := 0 ; i < s2len ; i ++ {
270
+ el := s2 [i ]
271
+ s2Map [el ] = true
272
+ }
273
+ for i := 0 ; i < s1len ; i ++ {
264
274
element := s1 [i ]
265
- if Contains ( s2 , element ) && ! Contains ( result , element ) {
275
+ if _ , ok := s2Map [ element ]; ok {
266
276
result = append (result , element )
267
277
}
268
278
}
Original file line number Diff line number Diff line change @@ -798,6 +798,18 @@ func TestIntersection(t *testing.T) {
798
798
v : []int {3 , 4 , 5 },
799
799
want : []int {3 },
800
800
},
801
+ {
802
+ name : "nil value" ,
803
+ s : nil ,
804
+ v : nil ,
805
+ want : nil ,
806
+ },
807
+ {
808
+ name : "different size" ,
809
+ s : []int {1 , 5 },
810
+ v : []int {5 , 10 , 25 },
811
+ want : []int {5 },
812
+ },
801
813
}
802
814
strTypeCases := []struct {
803
815
name string
You can’t perform that action at this time.
0 commit comments