From: Joel VanderWerf Date: 2004-03-14T05:01:42+09:00 Subject: Re: iterating with multiple values gabriele renzi wrote: > Hi gurus and nubys, > > Suppose you are dealing with an array like [1,2,3,4], and suppose ypou > want to deal, at any iteration, with 3 values.I mean something like: > > [1,2,3,4].each_3 do |pre,cur,next| > print pre,cur,next,"\n" > end > > nil,nil,1 > nil,1,2 > 1,2,3 > 2,3,4 > 3,4,nil > 4,nil,nil The enum tools library[1] has some methods for doing this: require 'enum/cluster' (0..5).each_with_neighbors { |x| p x } # prints: # [nil, 0, 1] # [0, 1, 2] # [1, 2, 3] # [2, 3, 4] # [3, 4, 5] # [4, 5, nil] [1,2,3,4].each_with_neighbors(8, 0) { |x| p x } # prints: # [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0] # [0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0] # [0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0] # [0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0] ('a'..'g').each_cluster(5) { |x| p x.join '' } # prints: # "abcde" # "bcdef" # "cdefg" [1] http://raa.ruby-lang.org/list.rhtml?name=enum