Синтаксис для цикла for в ruby - PullRequest
78 голосов
/ 09 января 2010

Как мне сделать этот тип цикла в Ruby?

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

}

Ответы [ 10 ]

113 голосов
/ 09 января 2010
array.each do |element|
  element.do_stuff
end

или

for element in array do
  element.do_stuff
end

Если вам нужен индекс, вы можете использовать это:

array.each_with_index do |element,index|
  element.do_stuff(index)
end
72 голосов
/ 08 февраля 2013
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

другой способ сделать это следующий

3.times do |n|
  puts n;
end

То будет печатать 0, 1, 2, поэтому может быть использован как итератор массива

Подумайте, этот вариант лучше соответствует потребностям автора

28 голосов
/ 27 августа 2013

Я продолжаю использовать эту ссылку в качестве главной ссылки для Google "ruby for loop", поэтому я хотел добавить решение для циклов, где шаг не был просто "1". В этих случаях вы можете использовать метод step, который существует в объектах Numerics и Date. Я думаю, что это близкое приближение для цикла for.

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
17 голосов
/ 10 июня 2017

Эквивалентность будет

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

или

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

или

i = 0
while i < array.size do
   array[i]
   i = i + 1 # where you may freely set i to any value
end
15 голосов
/ 09 января 2010
array.each_index do |i|
  ...
end

Это не очень Rubyish, но это лучший способ сделать цикл for из вопроса в Ruby

12 голосов
/ 05 ноября 2013

Чтобы повторить цикл фиксированное количество раз, попробуйте:

n.times do
  #Something to be done n times
end
8 голосов
/ 16 августа 2013

Если вам не нужен доступ к вашему массиву , (просто цикл for) вы можете использовать до или каждый:

Upto:

1.9.3p392 :030 > 2.upto(4) {|i| puts i}
2
3
4
 => 2 

Каждый

1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
 => 2..4 
8 голосов
/ 08 февраля 2013

Что? С 2010 года и никто не упоминал, что в Ruby есть штраф за цикл for / in (просто никто его не использует):

ar = [1,2,3,4,5,6]
for item in ar
  puts item
end
4 голосов
/ 09 января 2010
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}
0 голосов
/ 25 апреля 2014

Синтаксис цикла перечисления в Ruby отличается:

collection.each do |item|
...
end

Это читается как «вызов метода« each »экземпляра объекта массива« collection », который принимает блок с« blockargument »в качестве аргумента». Синтаксис блока в Ruby: «do ... end» или «{...}» для однострочных операторов.

Аргумент блока '| item |' является необязательным, но если он указан, первый аргумент автоматически представляет зацикленный элемент перечисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...