36 lines
692 B
Go
36 lines
692 B
Go
package utils
|
|
|
|
func Map[S, T any](source []S, f func(S) T) []T {
|
|
dest := make([]T, len(source))
|
|
for i, elem := range source {
|
|
dest[i] = f(elem)
|
|
}
|
|
return dest
|
|
}
|
|
|
|
func Reduce[S, T any](source []S, initialValue T, f func(T, S) T) T {
|
|
acc := initialValue
|
|
for _, elem := range source {
|
|
acc = f(acc, elem)
|
|
}
|
|
return acc
|
|
}
|
|
|
|
func ReduceIndexed[S, T any](source []S, initialValue T, f func(T, S, int, []S) T) T {
|
|
acc := initialValue
|
|
for index, elem := range source {
|
|
acc = f(acc, elem, index, source[:])
|
|
}
|
|
return acc
|
|
}
|
|
|
|
func Filter[T any](source []T, f func(T) bool) []T {
|
|
var dest []T
|
|
for _, elem := range source {
|
|
if f(elem) {
|
|
dest = append(dest, elem)
|
|
}
|
|
}
|
|
return dest
|
|
}
|