ruby中for循环的语法

DNB*_*ims 82 ruby syntax

我如何在Ruby中执行这种类型的for循环?

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

}
Run Code Online (Sandbox Code Playgroud)

Eim*_*tas 115

array.each do |element|
  element.do_stuff
end
Run Code Online (Sandbox Code Playgroud)

要么

for element in array do
  element.do_stuff
end
Run Code Online (Sandbox Code Playgroud)

如果您需要索引,可以使用:

array.each_with_index do |element,index|
  element.do_stuff(index)
end
Run Code Online (Sandbox Code Playgroud)

  • 我正在寻找一个循环索引,这些解决方案都没有立即明白如何做到这一点.op在代码中用array.length背叛了他的意图...... (13认同)
  • 很多时候,"每个人"都很棒.但有时我只想要一个该死的传统循环.有时候"Ruby方式"可能只是简单烦人. (7认同)
  • 仔细阅读我的回答.有一个包含索引的循环解决方案. (6认同)
  • 如果我想跳过下两个迭代怎么办? (3认同)

Ph0*_*n1x 74

limit = array.length;
for counter in 0..limit
 --- make some actions ---
end
Run Code Online (Sandbox Code Playgroud)

另一种方法是做到这一点

3.times do |n|
  puts n;
end
Run Code Online (Sandbox Code Playgroud)

多数民众赞成将打印0,1,2,所以也可以像数组迭代器一样使用

认为该变体更符合作者的需求


dsz*_*dsz 28

我一直把它作为google"ruby for loop"的顶级链接,所以我想为循环添加一个解决方案,其中步骤不仅仅是'1'.对于这些情况,您可以使用Numerics和Date对象上存在的"step"方法.我认为这是'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
Run Code Online (Sandbox Code Playgroud)


小智 18

等价就是

for i in (0...array.size)
end
Run Code Online (Sandbox Code Playgroud)

要么

(0...array.size).each do |i|
end
Run Code Online (Sandbox Code Playgroud)

要么

i = 0
while i < array.size do
   array[i]
   i = i + 1 # where you may freely set i to any value
end
Run Code Online (Sandbox Code Playgroud)


EmF*_*mFi 17

array.each_index do |i|
  ...
end
Run Code Online (Sandbox Code Playgroud)

它不是非常Rubyish,但它是在Ruby中从问题中进行for循环的最佳方式


yts*_*yts 12

要循环迭代一次,请尝试:

n.times do
  #Something to be done n times
end
Run Code Online (Sandbox Code Playgroud)

  • 这在需要使用索引时起作用:3次做| i | (3认同)

ste*_*lag 8

什么?从2010年开始,没有人提到Ruby有一个很好的for/in循环(它只是没有人使用它):

ar = [1,2,3,4,5,6]
for item in ar
  puts item
end
Run Code Online (Sandbox Code Playgroud)

  • *.each ... do*的一个优点是块临时在循环结束时超出范围,而*for ... in*在临时范围内. (5认同)

Ben*_*ier 8

如果您不需要访问您的阵列(只是一个简单的for循环),您可以使用upto或each:

取决于:

1.9.3p392 :030 > 2.upto(4) {|i| puts i}
2
3
4
 => 2 
Run Code Online (Sandbox Code Playgroud)

每:

1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
 => 2..4 
Run Code Online (Sandbox Code Playgroud)