From: Stefan Salewski Date: 2013-10-22T17:56:36+02:00 Subject: [ruby-core:57975] Module Enumerable -- each_cons() ==> each_cycle() Hello, I would really love to have a cyclic version of each_cons in Ruby -- I found the version below, which seems to work fine for me. I think that method is not too exotic, so it may be good to have this built in. https://www.ruby-forum.com/topic/106362 module Enumerable def each_cycle(window, start=0) wrap_start = [] cache = [] each_with_index do |e,i| cache << e if i >= start + (window - 1) yield cache[start, window] cache.shift else wrap_start << e end end wrap_start.each do |e| cache << e yield cache[start, window] cache.shift end self end end Then you can each_cycle anything that is Enumerable, like a Range: >> (1..5).each_cycle(3) {|x| p x} [1, 2, 3] [2, 3, 4] [3, 4, 5] [4, 5, 1] [5, 1, 2] => 1..5 >> { 'dog' => 'Rover', 'cat' => 'Mittens', 'fish' => 'Goldie' }.each_cycle(2) {|x| p x} [["cat", "Mittens"], ["fish", "Goldie"]] [["fish", "Goldie"], ["dog", "Rover"]] [["dog", "Rover"], ["cat", "Mittens"]] => {"cat"=>"Mittens", "fish"=>"Goldie", "dog"=>"Rover"}