【问题标题】:how does Enumerable#cycle work? (ruby)Enumerable#cycle 是如何工作的? (红宝石)
【发布时间】:2011-02-07 16:04:21
【问题描述】:
looper = (0..3).cycle
20.times { puts looper.next }

我能以某种方式找到 3 个中的下一个吗?我的意思是如果我可以在任何给定时间获得任何特定元素的.next。不仅仅是从第一个元素开始的显示循环。

更新

当然,在发布我的问题之前,我通过了 ruby​​ doc。但我没有在那里找到答案......

更新2

输入

looper = (0..max_cycle).cycle

max_cycle = 每次脚本运行时都可能不同的变量

looper = 始终来自区间 (0..max_cycle) 的变量,但脚本启动时的当前值可以是任意值。它基于Time.now.hour

输出

我想在脚本运行期间随时了解looper.next

【问题讨论】:

  • 这里的问题到底是什么?您预期的输入和输出是什么?
  • 是的,我想我可能不太清楚。请参阅更新2
  • 该更新只是说您阅读了文档。它没有澄清你的问题......
  • @Jimmy Cuadra:Update2 还没有。很抱歉。

标签: ruby enumerable


【解决方案1】:

你的问题不是很清楚。也许你想要这样的东西?

(current_value + 1) % (max_cycle + 1)

例如,如果max_cycle = 3,您将获得以下输出:

current_value    returns
      0             1
      1             2
      2             3
      3             0

【讨论】:

  • @Teoulas: :-) 这就是我想要的。我可以为此使用 Enumerable#cycle 吗?
  • @Radek,我不这么认为。可枚举对象用于迭代值/对象的集合。在您的情况下,您只需要范围的第一个和最后一个数字。如果你坚持调用一个方法,你可以在 ruby​​ 的 Range 中添加一个。例如。 (0..3).next_with_wrap(2) => 3
  • 我什么都不坚持。我正在寻找最好的解决方案并不断学习……我写了一个方法,但我认为一定有一些更简单的方法,然后 Enumerable#cycle 出现了。我以为我可以使用它。而已。您的解决方案非常好,比我的方法更容易。我对此很满意。谢谢
【解决方案2】:

【讨论】:

  • 当然,在发布我的问题之前,我浏览了 ruby​​ 文档。但我没有在那里找到答案......
猜你喜欢
  • 1970-01-01
  • 2014-10-18
  • 2015-03-31
  • 2015-10-21
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多