Chunk an Enumerable into fixed-size batches
Crystal
def chunks(items : Enumerable(T), size : Int32) : Array(Array(T)) forall T
raise ArgumentError.new("size must be positive") if size <= 0
batches = [] of Array(T)
current = [] of T
items.each do |item|
current << item
next unless current.size == size
batches << current
current = [] of T
end
batches << current unless current.empty?
batches
end
chunks((1..7), 3).each { |batch| p batch }