From: Logan Capaldo Date: 2006-08-06T04:27:38+09:00 Subject: Re: Iterating over an array n element at a time On Aug 5, 2006, at 3:20 PM, Trans wrote: > > Kim Pedersen wrote: >> Is there an elegant way to iterate over an array n elements at a >> time? >> e.g. something like... >> >> a = [1,1,1,2,2,2,3,3,3] >> >> a.each(3) do |x,y,z| >> print x,y,z,"\n" >> end >> >> prints... >> 111 >> 222 >> 333 >> >> //kim > > enumerator is probably better since it is built-in, but... > > require 'facet/enumerable/each_by' > a = [1,1,1,2,2,2,3,3,3] > a.each_by(3) { |x,y,z| print x,y,z,"\n" } > 111 > 222 > 333 > > But why not have Ruby fill those arguments out automatically? This > already does: > > a = [[1,1,1],[2,2,2],[3,3,3]] > a.each { |x,y,z| print x,y,z,"\n" } > > So couldn't some "slurping" indicator be used? > > a = [1,1,1,2,2,2,3,3,3] > a.each { |(x,y,z)| print x,y,z,"\n" } > > Or something. > ( ) already have meaning in block arguments though e.g.: { :a => 1, :b => 2 }.inject({}) { |h, (k, v)| h[k] = v + 1; h } #=> {:b=>3, :a=>2} > T. > >