From: andrew_queisser@... (andrew queisser) Date: 2002-03-06T07:40:58+09:00 Subject: How to implement each_continuous_range I'd like to implement an iterator that returns all ranges of successive elements of an array. If an array consists of [1,2,3,5,6] the iterator should return 1,3 and 5,6. I don't care whether the iterator returns an array with two elements or two values. So far I have this: #---------------------------------------- x = [ 1, 2, 3, 4, 7, 8, 12, 15, 16, 22 ] class Array def each_cont_range r0 = 0 for i in 0..length()-2 if (self[i+1] != self[i].succ) yield(self[r0], self[i]) r0 = i+1 end end yield(self[r0], self[-1]) end end x.each_cont_range { |r0, r1| print "range #{r0} to #{r1}\n" } #--------------------------------------------------- It works but it isn't pretty. I tried to use an inject function but didn't get anywhere. Suggestions for improvement? Are there any built-in ways of doing this? Thanks, Andrew Queisser