From: Robert Klemme Date: 2007-12-08T20:00:00+09:00 Subject: Re: for loop iterator, next object On 04.12.2007 23:18, Christian von Kleist wrote: > On Dec 4, 2007 4:55 PM, lpgauth@gmail.com wrote: >> On Dec 4, 4:19 pm, MenTaLguY wrote: >>> On Wed, 5 Dec 2007 05:42:21 +0900, MenTaLguY wrote: >>>> On Wed, 5 Dec 2007 05:35:01 +0900, "lpga...@gmail.com" >>>> wrote: >>>>> Assume I have: >>>>> for user in @Users >>>>> put user.name >>>>> put user.name #I want this to be next object in @Users >>>>> end >>>>> I want the second user.name to be the next object in the list. Is >>>>> there a way to do this? >>>> Of course. But what do you want to happen when you're at the end >>>> of the list and there is no longer a next object? >>> That is, if you only care about pairs of users, then you can do this: >>> >>> prior = nil >>> for user in @Users >>> if prior >>> put prior.name >>> put user.name >>> end >>> prior = user >>> end >>> >>> Obviously that won't print anything if there is only one entry in >>> @Users, though. >>> >>> -mental >> I figured it out... You can use in_group_of >> >> > > > Cool! That's from Rails (not part of Ruby), but there's also each_slice(n): > > require 'enumerable' > > a = [1, 2, 3, 4] > > a.each_slice(2) {|slice| puts slice[0] + slice[1]} I'd probably rather use #each_cons: irb(main):001:0> %w{a b c}.each_cons(2) {|*a| p a} [["a", "b"]] [["b", "c"]] => nil Cheers robert