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:
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user