33 lines
471 B
Go
33 lines
471 B
Go
package tool
|
|
|
|
import "iter"
|
|
|
|
func Bulk[T any](slice []T, size int) iter.Seq2[int, []T] {
|
|
if size <= 0 {
|
|
panic("bulk size must be positive")
|
|
}
|
|
|
|
s := make([]T, 0, size)
|
|
idx := 0
|
|
return func(yield func(int, []T) bool) {
|
|
for i := range slice {
|
|
s = append(s, (slice)[i])
|
|
if len(s) >= size {
|
|
|
|
// send to handle
|
|
ok := yield(idx, s)
|
|
if !ok {
|
|
return
|
|
}
|
|
|
|
idx++
|
|
s = make([]T, 0, size)
|
|
}
|
|
}
|
|
|
|
if len(s) > 0 {
|
|
yield(idx, s)
|
|
}
|
|
}
|
|
}
|