mirror of
https://github.com/IBM/fp-go.git
synced 2025-06-25 00:36:54 +02:00
34 lines
785 B
Go
34 lines
785 B
Go
![]() |
package record
|
||
|
|
||
|
func Reduce[M ~map[K]V, K comparable, V, R any](r M, f func(R, V) R, initial R) R {
|
||
|
current := initial
|
||
|
for _, v := range r {
|
||
|
current = f(current, v)
|
||
|
}
|
||
|
return current
|
||
|
}
|
||
|
|
||
|
func ReduceWithIndex[M ~map[K]V, K comparable, V, R any](r M, f func(K, R, V) R, initial R) R {
|
||
|
current := initial
|
||
|
for k, v := range r {
|
||
|
current = f(k, current, v)
|
||
|
}
|
||
|
return current
|
||
|
}
|
||
|
|
||
|
func ReduceRef[M ~map[K]V, K comparable, V, R any](r M, f func(R, *V) R, initial R) R {
|
||
|
current := initial
|
||
|
for _, v := range r {
|
||
|
current = f(current, &v) // #nosec G601
|
||
|
}
|
||
|
return current
|
||
|
}
|
||
|
|
||
|
func ReduceRefWithIndex[M ~map[K]V, K comparable, V, R any](r M, f func(K, R, *V) R, initial R) R {
|
||
|
current := initial
|
||
|
for k, v := range r {
|
||
|
current = f(k, current, &v) // #nosec G601
|
||
|
}
|
||
|
return current
|
||
|
}
|