96

How do I do this type of for loop in Ruby?

for(int i=0; i<array.length; i++) {

}
2
  • @johannes Reading a book is a good idea, but preferably not one about Ruby 1.6! Commented Apr 10, 2012 at 1:12
  • Don't forget to take a look at some useful methods in ruby-doc: Enumerable module. Commented Mar 23, 2015 at 7:20

10 Answers 10

124
array.each do |element|
  element.do_stuff
end

or

for element in array do
  element.do_stuff
end

If you need index, you can use this:

array.each_with_index do |element,index|
  element.do_stuff(index)
end
Sign up to request clarification or add additional context in comments.

7 Comments

i was looking specifically for indexing in a loop, none of these solutions make it immediately obvious how to do that. the op betrayed his intentions with array.length in the code...
Read my answer carefully. There's a looping solution with indexing included.
Often times, each is great. But sometimes I just want a goddamn traditional for loop. Sometimes the "Ruby way" can be just plain annoying.
how do i manually set index in ruby so i can write a sort myself
what if i want to skip next two iterations
|
82
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

the other way to do that is the following

3.times do |n|
  puts n;
end

thats will print 0, 1, 2, so could be used like array iterator also

Think that variant better fit to the author's needs

Comments

34

I keep hitting this as a top link for google "ruby for loop", so I wanted to add a solution for loops where the step wasn't simply '1'. For these cases, you can use the 'step' method that exists on Numerics and Date objects. I think this is a close approximation for a 'for' loop.

start = Date.new(2013,06,30)
stop = Date.new(2011,06,30)
# step back in time over two years, one week at a time
start.step(stop, -7).each do |d| 
    puts d
end

Comments

24

The equivalence would be

for i in (0...array.size)
end

or

(0...array.size).each do |i|
end

or

i = 0
while i < array.size do
   array[i]
   i = i + 1 # where you may freely set i to any value
end

Comments

17
array.each_index do |i|
  ...
end

It's not very Rubyish, but it's the best way to do the for loop from question in Ruby

1 Comment

This is brilliant. It's true that the answer is not each but rather each_index. +1
14

To iterate a loop a fixed number of times, try:

n.times do
  #Something to be done n times
end

Comments

11

If you don't need to access your array, (just a simple for loop) you can use upto or each :

Upto:

2.upto(4) {|i| puts i}
2
3
4 

Each:

(2..4).each {|i| puts i}
2
3
4

Comments

8

What? From 2010 and nobody mentioned Ruby has a fine for /in loop (it's just nobody uses it):

ar = [1,2,3,4,5,6]
for item in ar
  puts item
end

1 Comment

One advantage of .each... do is that the block temporary falls out of scope at the end of the loop, whereas for...in leaves the temporary in scope.
4
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}

Comments

0

Ruby's enumeration loop syntax is different:

collection.each do |item|
...
end

This reads as "a call to the 'each' method of the array object instance 'collection' that takes block with 'blockargument' as argument". The block syntax in Ruby is 'do ... end' or '{ ... }' for single line statements.

The block argument '|item|' is optional but if provided, the first argument automatically represents the looped enumerated item.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.