我有一组需要重复不确定次数的对象。如果数组已修复,这很容易设置:
>> 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)
并制作一个大数组,但希望得到一个懒惰评估的解决方案。
提前致谢。
答案 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"]