Синтаксис для цикла for в ruby


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

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

}
10 68

10 ответов:

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
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

другой способ сделать это заключается в следующем

3.times do |n|
  puts n;
end

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

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

Я продолжаю нажимать это как верхнюю ссылку для google "ruby for loop", поэтому я хотел добавить решение для циклов, где шаг был не просто "1". Для этих случаев вы можете использовать метод "шаг", который существует для объектов 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
array.each_index do |i|
  ...
end

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

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

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

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

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

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

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

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

до:

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 
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}

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

collection.each do |item|
...
end

это читается как"вызов метода 'each' экземпляра объекта массива 'collection', который принимает блок с 'blockargument' в качестве аргумента". Синтаксис блока в Ruby - ' do ... конец' или '{ ... } 'для однострочных операторов.

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