mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 20:52:33 +02:00
28 lines
675 B
Go
28 lines
675 B
Go
package utils
|
|
|
|
// Intersect returns a new slice containing the elements that are present in both input slices.
|
|
// This provides a more efficient solution than using two nested loops.
|
|
func Intersect[T comparable, Slice ~[]T](slice1 Slice, slice2 Slice) Slice {
|
|
var result Slice
|
|
seen := map[T]struct{}{}
|
|
|
|
for i := range slice1 {
|
|
seen[slice1[i]] = struct{}{}
|
|
}
|
|
|
|
for i := range slice2 {
|
|
if _, ok := seen[slice2[i]]; ok {
|
|
result = append(result, slice2[i])
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// Slice returns a slice of the first n elements in slice like javascript's slice.
|
|
func Slice[T any](slice []T, n int) []T {
|
|
if n >= len(slice) {
|
|
return slice
|
|
}
|
|
return slice[:n]
|
|
}
|