diff --git a/parallel/parallel.go b/parallel/parallel.go index 0aaea52..bec772f 100644 --- a/parallel/parallel.go +++ b/parallel/parallel.go @@ -25,6 +25,22 @@ func Map[T any](xs []T, fx func(T) T) []T { wg.Wait() return lambda.Flatten(spl) } + +func MapV[T, V any](xs []T, fx func(T) T) []V { + spl := lambda.Split(xs, routineCount) + wg := new(sync.WaitGroup) + wg.Add(len(spl)) + tmp := make([][]V, len(spl)) + for i, v := range spl { + go func(ix int, vx []T) { + spl[ix] = lambda.Map(vx, fx) + wg.Done() + }(i, v) + } + wg.Wait() + return lambda.Flatten(tmp) +} + func Foldl[T any](xs []T, fx func(T, T) T) T { spl := lambda.Split(xs, routineCount) wg := new(sync.WaitGroup)