2024-09-19 23:11:12 +00:00
|
|
|
package h
|
|
|
|
|
|
2024-10-26 02:59:17 +00:00
|
|
|
// Unique returns a new slice with only unique items.
|
2024-09-19 23:11:12 +00:00
|
|
|
func Unique[T any](slice []T, key func(item T) string) []T {
|
|
|
|
|
var result []T
|
|
|
|
|
seen := make(map[string]bool)
|
|
|
|
|
for _, v := range slice {
|
|
|
|
|
k := key(v)
|
|
|
|
|
if _, ok := seen[k]; !ok {
|
|
|
|
|
seen[k] = true
|
|
|
|
|
result = append(result, v)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-26 02:59:17 +00:00
|
|
|
// Filter returns a new slice with only items that match the predicate.
|
2024-09-19 23:11:12 +00:00
|
|
|
func Filter[T any](slice []T, predicate func(item T) bool) []T {
|
|
|
|
|
var result []T
|
|
|
|
|
for _, v := range slice {
|
|
|
|
|
if predicate(v) {
|
|
|
|
|
result = append(result, v)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-26 02:59:17 +00:00
|
|
|
// Map returns a new slice with the results of the mapper function.
|
2024-09-19 23:11:12 +00:00
|
|
|
func Map[T, U any](slice []T, mapper func(item T) U) []U {
|
|
|
|
|
var result []U
|
|
|
|
|
for _, v := range slice {
|
|
|
|
|
result = append(result, mapper(v))
|
|
|
|
|
}
|
|
|
|
|
return result
|
|
|
|
|
}
|