Chunked Array

Posted on February 25, 2007
Split an array of elements into a set of smaller arrays of equal size. Extra elements are preferentially assigned to earlier arrays. If there are no elements in a given returned array it will be [] (empty array)

# use as standalone function 
def chunk_array(array, pieces=2) 
len = array.length; 
mid = (len/pieces) 
chunks = [] 
start = 0 
1.upto(pieces) do |i| 
last = start+mid 
last = last-1 unless len%pieces >= i 
chunks << array[start..last] || [] 
start = last+1 
end 
chunks 
end 

# use as array.chunk 
class Array 
def chunk(pieces=2) 
len = self.length; 
mid = (len/pieces) 
chunks = [] 
start = 0 
1.upto(pieces) do |i| 
last = start+mid 
last = last-1 unless len%pieces >= i 
chunks << self[start..last] || [] 
start = last+1 
end 
chunks 
end 
end