25 lines
531 B
Go
25 lines
531 B
Go
package notlinq
|
|
|
|
func UniqueBy[T any, K comparable](items []T, keySelector func(T) K) []T {
|
|
seen := make(map[K]struct{})
|
|
result := make([]T, 0, len(items))
|
|
for _, item := range items {
|
|
key := keySelector(item)
|
|
if _, exists := seen[key]; !exists {
|
|
seen[key] = struct{}{}
|
|
result = append(result, item)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func Where[T any](items []T, predicate func(T) bool) []T {
|
|
result := make([]T, 0)
|
|
for _, item := range items {
|
|
if predicate(item) {
|
|
result = append(result, item)
|
|
}
|
|
}
|
|
return result
|
|
}
|