Split a Nim sequence into fixed-size chunks
Nim
proc chunked[T](items: openArray[T]; size: int): seq[seq[T]] =
doAssert size > 0, "chunk size must be positive"
var i = 0
while i < items.len:
result.add(items[i ..< min(i + size, items.len)])
i += size
let data = @[1, 2, 3, 4, 5, 6, 7]
for batch in chunked(data, 3):
echo batch
let empty: seq[int] = @[]
echo chunked(empty, 3).len