From: Joel VanderWerf Date: 2007-04-29T03:34:07+09:00 Subject: Re: cyclic array Xavier Noria wrote: ... > module Enumerable > def each_cycle(window, start=0) > (start...length+start).each do |i| > yield((i..i+window).map {|n| self[n % length]}) > end > end > end Here is a slight variation, for amusement, but it doesn't work for window > length: module Enumerable def each_cycle(window, start = 0) (-length+start...start).each do |i| yield values_at(*(i..i+window)) end end end a = [ "a", "b", "c", "d", "e", "f", "g"] a.each_cycle(4) do |cycle| puts "#{cycle}" end a.each_cycle(14) do |cycle| puts "#{cycle}" end __END__ abcde bcdef cdefg defga efgab fgabc gabcd abcdefgabcdefg bcdefgabcdefg cdefgabcdefg defgabcdefg efgabcdefg fgabcdefg gabcdefg -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407