GoDoxy/internal/utils/slices.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]
}