【问题标题】:Iterate through a range遍历一个范围
【发布时间】:2018-04-07 09:01:41
【问题描述】:

我需要从1 迭代到给定数字A。我使用以下代码实现了这一点:

(1..A).step(1) do |n| puts n end

还有比这更好的方法吗?

我的默认步长是 1。

【问题讨论】:

  • 你的代码有什么问题?
  • 只是尝试重构以寻找更好的选择
  • 我投票结束这个问题,因为这个问题应该属于 codereview.stackexchange.com。
  • 如果您只想打印数字:puts *1..A

标签: ruby loops iterator


【解决方案1】:

在这种情况下,更惯用的[可以说]方法是使用Integer#upto

1.upto(A) { |n| puts n }

另外,step(1) 是一个默认值,您可以简单地迭代范围本身:

(1..A).each { |n| puts n }

或者,甚至使用Integer#times

A.times { |n| puts n + 1 }

注意,Integer#times0 开始计数,因此需要+ 1

注意还请注意下面@Stefan 的非常有价值的评论。

【讨论】:

  • 可能值得注意的是——尽管它们产生相同的输出——每个解决方案都有不同的返回值:分别为11..AA。 (因为他们都返回接收者)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
相关资源
最近更新 更多