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


Відповіді:


118
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

15
я шукав спеціально індексацію в циклі, жодне з цих рішень не робить відразу очевидним, як це зробити. Оператор видав його наміри з array.length у коді ...
jheriko

6
Уважно прочитайте мою відповідь. Існує циклічне рішення з включеною індексацією.
Eimantas

8
Часто, eachце здорово. Але іноді я просто хочу проклятий традиційний цикл for. Іноді "рубіновий шлях" може просто дратувати.
Рубен Мартінес-молодший

1
як мені вручну встановити індекс в рубіні, щоб я міг написати сортування самостійно
Мухаммад Умер

6
що, якщо я хочу пропустити наступні дві ітерації
Мухаммад Умер

77
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

інший спосіб зробити це наступний

3.times do |n|
  puts n;
end

те буде друкувати 0, 1, 2, тому може використовуватися як ітератор масиву

Подумайте, що цей варіант краще відповідає потребам автора


29

Я продовжую натискати це як головне посилання для 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

20

Еквівалентність буде

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

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

Це не дуже Rubyish, але це найкращий спосіб зробити цикл for з питання в Ruby


Це чудово. Це правда, що відповідь не така, eachа швидше each_index. +1
Ден Розенстарк,

12

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

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

10

Якщо вам не потрібно отримувати доступ до свого масиву , (просто простий цикл 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

Що? З 2010 року і ніхто не згадував, що Ruby має штраф за цикл / вхід (це просто ніхто не використовує):

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

5
Однією з переваг .each ... do є те, що блок тимчасовий випадає за межі обсягу в кінці циклу, тоді як for ... in залишає тимчасовий обсяг.
Wayne Conrad


0

Синтаксис циклу перелічення Ruby відрізняється:

collection.each do |item|
...
end

Це читається як "виклик методу 'кожен' екземпляра об'єкта масиву 'колекція', який приймає блок із аргументом" blockargument ". Синтаксис блоку в Ruby - це "do ... end" або "{...}" для однорядкових операторів.

Аргумент блоку '| item |' є необов’язковим, але якщо надано, перший аргумент автоматично представляє циклічний перерахований елемент.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.