diff --git a/filter.go b/filter.go index 5ebe2ad..ef29dd2 100644 --- a/filter.go +++ b/filter.go @@ -9,3 +9,22 @@ func Filter[T any](slice []T, f func(T) bool) []T { } return ret } + +func FindFirst[T any](slice []T, f func(T) bool) (T, bool) { + for _, v := range slice { + if f(v) { + return v, true + } + } + return *new(T), false +} + +func FindLast[T any](slice []T, f func(T) bool) (T, bool) { + for i := len(slice); i >= 0; i-- { + v := slice[i] + if f(v) { + return v, true + } + } + return *new(T), false +} diff --git a/search.go b/search.go deleted file mode 100644 index 716277e..0000000 --- a/search.go +++ /dev/null @@ -1,11 +0,0 @@ -package slices - -func Search[T any](slice []T, f func(a, b T) T) T { - if len(slice) == 0 { - return *new(T) - } - - value := slice[0] - Each(slice, func(v T) { value = f(value, v) }) - return value -}