From 26ea846e93aca57e1e61fd3986e65c979af65fc5 Mon Sep 17 00:00:00 2001 From: milarin Date: Tue, 20 Feb 2024 16:03:29 +0100 Subject: [PATCH] - added FindFirst and FindLast - removed Search --- filter.go | 19 +++++++++++++++++++ search.go | 11 ----------- 2 files changed, 19 insertions(+), 11 deletions(-) delete mode 100644 search.go 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 -}