For loop iterator, next object

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?

Thanks in advance,
LP

On Wed, 5 Dec 2007 05:35:01 +0900, “[email protected]
[email protected] 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?

-mental

On Wed, 5 Dec 2007 05:42:21 +0900, MenTaLguY [email protected] wrote:

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

On Dec 4, 2007 4:55 PM, [email protected] [email protected] wrote:

if prior

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]}

=>

3
7

On Dec 4, 4:19 pm, MenTaLguY [email protected] wrote:

I want the second user.name to be the next object in the list. Is
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

On Dec 4, 2007 9:34 PM, Chris F. [email protected] wrote:

You can also use each_with_index:

I think using each_with_index that way will give behavior like
each_cons.

On 04.12.2007 23:18, Christian von Kleist wrote:

I want the second user.name to be the next object in the list. Is
end

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

Christian von Kleist wrote:

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]}

You can also use each_with_index:

users.each_with_index do |user, index|
puts user
if index < users.length
puts users[index + 1]
end
end

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs