я специально искал индексацию в цикле, ни одно из этих решений не дает сразу понять, как это сделать. оператор выдал свои намерения с помощью array.length в коде ...
jheriko 01
6
Прочтите мой ответ внимательно. Есть циклическое решение с включенной индексацией.
Eimantas
8
Часто eachэто здорово. Но иногда мне просто нужен чертовски традиционный цикл for. Иногда «Рубиновый путь» может просто раздражать.
Рубен Мартинес-младший
1
как мне вручную установить индекс в рубине, чтобы я мог сам написать сортировку
Мухаммад Умер
6
что, если я хочу пропустить следующие две итерации
Мухаммад Умер
77
limit = array.length;
for counter in0..limit
--- make some actions ---
end
Другой способ сделать это следующий
3.times do|n|
puts n;
end
это будет печатать 0, 1, 2, поэтому его также можно использовать как итератор массива
Я продолжаю нажимать на эту ссылку как на главную ссылку для 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
Одним из преимуществ .each ... do является то, что блок временно выпадает из области видимости в конце цикла, тогда как for ... in оставляет временную область в области видимости.
Это читается как «вызов метода 'each' экземпляра объекта массива 'collection', который принимает блок с 'аргументом блока' в качестве аргумента». Синтаксис блока в Ruby - do ... end или {...} для однострочных операторов.
Аргумент блока '| item |' не является обязательным, но если он указан, первый аргумент автоматически представляет зацикленный элемент перечисления.
Ответы:
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
источник
each
это здорово. Но иногда мне просто нужен чертовски традиционный цикл for. Иногда «Рубиновый путь» может просто раздражать.limit = array.length; for counter in 0..limit --- make some actions --- end
Другой способ сделать это следующий
3.times do |n| puts n; end
это будет печатать 0, 1, 2, поэтому его также можно использовать как итератор массива
Думаю, этот вариант больше подходит автору
источник
Я продолжаю нажимать на эту ссылку как на главную ссылку для 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
источник
Эквивалентность будет
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
источник
array.each_index do |i| ... end
Это не очень Rubyish, но это лучший способ сделать цикл for из вопроса в Ruby
источник
each
а скорееeach_index
. +1Чтобы повторить цикл фиксированное количество раз, попробуйте:
n.times do #Something to be done n times end
источник
Если вам не нужен доступ к вашему массиву (просто цикл for), вы можете использовать upto или each:
Вплоть до:
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
источник
Какие? С 2010 года, и никто не упоминал, что у Ruby есть штраф для цикла for / in (его просто никто не использует):
ar = [1,2,3,4,5,6] for item in ar puts item end
источник
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}
источник
Синтаксис цикла перечисления Ruby отличается:
collection.each do |item| ... end
Это читается как «вызов метода 'each' экземпляра объекта массива 'collection', который принимает блок с 'аргументом блока' в качестве аргумента». Синтаксис блока в Ruby - do ... end или {...} для однострочных операторов.
Аргумент блока '| item |' не является обязательным, но если он указан, первый аргумент автоматически представляет зацикленный элемент перечисления.
источник