for loop iterator, next object

L

lpgauth

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
 
M

MenTaLguY

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
 
M

MenTaLguY

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
 
L

lpgauth

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
 
C

Chris Fisher

Christian said:
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
 
R

Robert Klemme

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top