枚举器由重复(但正在改变)的数组组成

时间:2017-01-15 23:56:25

标签: ruby

我有一组需要重复不确定次数的对象。如果数组已修复,这很容易设置:

>> enum = ['Start', 'Peak', 'Finish'].cycle
>> enum.first(7)
=> ['Start', 'Peak', 'Finish', 'Start', 'Peak', 'Finish', 'Start']

但我想要的结果是:

>> enum = <Enumerator magic here>
>> enum.first(7)
=> ['Start Lap 1', 'Peak Lap 1', 'Finish Lap 1', 'Start Lap 2', 'Peak Lap 2', 'Finish Lap 2', 'Start Lap 3']

似乎我应该可以从(1..Float::INFINITY)开始,并使用#map#each获得正确的结果,但我没有运气。我知道我可以使用(1..arbitrary_big_number)并制作一个大数组,但希望得到一个懒惰评估的解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:3)

试试这个

enum = Enumerator.new do |y|
  lap = 1
  ss = %w(Start Peak Finish).cycle
  loop do
    3.times { y << "#{ss.next} Lap #{lap}" }
    lap += 1
  end
end

enum.first(7)
 => ["Start Lap 1", "Peak Lap 1", "Finish Lap 1", "Start Lap 2", "Peak Lap 2", "Finish Lap 2", "Start Lap 3"]