Here is my implementation
def chunk(a, pieces) size = a.size / pieces extra = a.size % pieces chunks = [] start = 0 1.upto(pieces) do |i| last = (i <= extra) ? size.next : size chunks << a.slice(start, last) start = chunks.flatten.size end chunks end
name it like that
a = *(1..10) puts chunk(a, 3)
displays
[1, 2, 3, 4] [5, 6, 7] [8, 9, 10]
If the part size is too large, it fills the empty arrays
a = *(1..10) puts chunk(a, 14)
displays
[[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [], [], [], []]
source share