Ruby:如何迭代一个范围,但以设定的增量?
Posted
技术标签:
【中文标题】Ruby:如何迭代一个范围,但以设定的增量?【英文标题】:Ruby: How to iterate over a range, but in set increments? 【发布时间】:2011-05-19 18:45:16 【问题描述】:所以我正在像这样迭代一个范围:
(1..100).each do |n|
# n = 1
# n = 2
# n = 3
# n = 4
# n = 5
end
但我想做的是迭代 10 次。
所以不是将n
增加 1,而是下一个 n
实际上是 10,然后是 20、30 等等。
【问题讨论】:
可能重复***.com/questions/2583665/about-ruby-range @DiegoDias 但这是最好的,然后是那个线程 【参考方案1】:这是另一种可能看起来更熟悉的方法:
for i in (0..10).step(2) do
puts i
end
【讨论】:
抱歉,Ruby 风格指南强烈反对使用for
循环。
@DarthEgregious 为什么会这样?
每一个事物都是一个对象,每一个动作都是一个方法调用,这是哲学的延伸。因此,您应该使用each
方法,而不是使用for
的内置for 循环。【参考方案2】:
您可以使用Numeric#step
。
0.step(30,5) do |num|
puts "number is #num"
end
# >> number is 0
# >> number is 5
# >> number is 10
# >> number is 15
# >> number is 20
# >> number is 25
# >> number is 30
【讨论】:
【参考方案3】:rng.step(n=1) | obj | block => rng
遍历 rng,将每个第 n 个元素传递给块。如果范围包含数字或字符串,则使用自然排序。否则 step 调用 succ 来遍历范围元素。以下代码使用类 Xs,在类级文档中定义。
range = Xs.new(1)..Xs.new(10)
range.step(2) |x| puts x
range.step(3) |x| puts x
产生:
1 x
3 xxx
5 xxxxx
7 xxxxxxx
9 xxxxxxxxx
1 x
4 xxxx
7 xxxxxxx
10 xxxxxxxxxx
参考:http://ruby-doc.org/core/classes/Range.html
......
【讨论】:
【参考方案4】:有关完整 API,请参阅 http://ruby-doc.org/core/classes/Range.html#M000695。
基本上你使用step()
方法。例如:
(10..100).step(10) do |n|
# n = 10
# n = 20
# n = 30
# ...
end
【讨论】:
这个答案让我找到了我正在寻找的东西......如果你有两次,你可以做(time1..time2).step(15.minutes) do |time|
以上是关于Ruby:如何迭代一个范围,但以设定的增量?的主要内容,如果未能解决你的问题,请参考以下文章