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 }