【发布时间】:2010-01-09 09:01:09
【问题描述】:
如何在 Ruby 中执行这种类型的 for 循环?
for(int i=0; i<array.length; i++) {
}
【问题讨论】:
-
@johannes 看书是个好主意,但最好不要看 Ruby 1.6!
-
别忘了看看ruby-doc: Enumerable module中一些有用的方法。
如何在 Ruby 中执行这种类型的 for 循环?
for(int i=0; i<array.length; i++) {
}
【问题讨论】:
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 循环。有时,“Ruby 方式”可能很烦人。
limit = array.length;
for counter in 0..limit
--- make some actions ---
end
另一种方法如下
3.times do |n|
puts n;
end
这将打印 0、1、2,因此也可以像数组迭代器一样使用
认为该变体更适合作者的需求
【讨论】:
我一直把它作为谷歌“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
【讨论】:
等价于
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,但它是在 Ruby 中从 question 中执行 for 循环的最佳方法
【讨论】:
each,而是each_index。 +1
要将循环迭代固定次数,请尝试:
n.times do
#Something to be done n times
end
【讨论】:
如果您不需要访问您的数组,(只是一个简单的 for 循环)您可以使用 upto 或每个:
至:
2.upto(4) {|i| puts i}
2
3
4
每个:
(2..4).each {|i| puts i}
2
3
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
这读作“对数组对象实例 'collection' 的 'each' 方法的调用,该方法以 'blockargument' 作为参数的块”。对于单行语句,Ruby 中的块语法是 'do ... end' 或 '{ ... }'。
方块参数'|item|'是可选的,但如果提供,第一个参数会自动表示循环的枚举项。
【讨论】: