Here’s a useful enhancement to arrays that allows you to process elements in a block n at a time. N is inferred by the arity of your block signature.
require 'enumerator'
module Enumerable
def eachn(&block)
n = block.arity
each_slice(n) {|i| block.call(*i)}
end
end
a = (1..10).to_a
a.eachn {|x,y,z| p [x,y,z]}
Namaste…