modash/moslice/find.go
Leon Mika 5586ab7464
All checks were successful
ci / deploy (push) Successful in 1m5s
Added some more find functions
2026-09-05 09:40:33 +10:00

76 lines
1.5 KiB
Go

package moslice
func Contains[T comparable](ts []T, needle T) bool {
for _, t := range ts {
if t == needle {
return true
}
}
return false
}
func FirstWhere[T any](ts []T, predicate func(t T) bool) T {
var zeroT T
for _, t := range ts {
if predicate(t) {
return t
}
}
return zeroT
}
// FirstIndexWhere returns the index of the first element in the slice that satisfies the predicate. An empty slice will return -1
func FirstIndexWhere[T any](ts []T, predicate func(t T) bool) int {
for i, t := range ts {
if predicate(t) {
return i
}
}
return -1
}
func FindWhere[T any](ts []T, predicate func(t T) bool) (T, bool) {
var zeroT T
for _, t := range ts {
if predicate(t) {
return t, true
}
}
return zeroT, false
}
func FindWithIndexWhere[T any](ts []T, predicate func(t T) bool) (T, int, bool) {
var zeroT T
for i, t := range ts {
if predicate(t) {
return t, i, true
}
}
return zeroT, 0, false
}
// AnyWhere returns true if any element in the slice satisfies the predicate. An empty slice will return false
func AnyWhere[T any](ts []T, predicate func(t T) bool) bool {
for _, t := range ts {
if predicate(t) {
return true
}
}
return false
}
// AllWhere returns true if all the element in the slice satisfies the predicate. An empty slice will return false
func AllWhere[T any](ts []T, predicate func(t T) bool) bool {
if len(ts) == 0 {
return false
}
for _, t := range ts {
if !predicate(t) {
return false
}
}
return true
}