1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00

feat: add reduce for iterator

This commit is contained in:
dudaodong
2022-12-26 16:55:24 +08:00
parent b9f0854950
commit b06fb6736d
2 changed files with 19 additions and 0 deletions

View File

@@ -101,3 +101,14 @@ func (iter *joinIterator[T]) HasNext() bool {
return result return result
} }
// Reduce reduces iter to a single value using the reduction function reducer
func Reduce[T any, U any](iter Iterator[T], initial U, reducer func(U, T) U) U {
acc := initial
for item, ok := iter.Next(); ok; item, ok = iter.Next() {
acc = reducer(acc, item)
}
return acc
}

View File

@@ -52,3 +52,11 @@ func TestJoinIterator(t *testing.T) {
assert.Equal([]int{2, 3, 4}, ToSlice(iter)) assert.Equal([]int{2, 3, 4}, ToSlice(iter))
} }
func TestReduce(t *testing.T) {
assert := internal.NewAssert(t, "TestReduce")
iter := FromSlice([]int{1, 2, 3, 4})
sum := Reduce(iter, 0, func(a, b int) int { return a + b })
assert.Equal(10, sum)
}