2014-09-22 79 views
0

指定索引创建一个数组的循环,我从这样的数组写了一个循环的脚本:如何在红宝石

a = [1, 2, 3, 4] 
a.cycle.each{|i| p i; sleep 1} 

,我想从一个指定索引开始一个循环。

index = 2 
(a[index..-1] + a.cycle).each{|i| p i; sleep 1} 

此代码以错误TypeError: no implicit conversion of Enumerator into Array结尾。

我该如何写这种情况下的循环代码?

+1

它说的是,如果没有块是考虑到循环,它返回一个枚举,而不是因此错误类型的文档。 – squiguy 2014-09-22 02:11:26

回答

2

你可以使用rotate

a.rotate(new_index).cycle { ... } 

(注:我不认为你需要的.each

2

rotate是正确的答案,但你的代码是不工作的原因是因为你试图连接数组的最后一部分和a.cycle,这是一个Enumerator,可能不是你想要的。此外,如果您连接数组的其余部分,则您的代码将输出[3, 4, 1, 2, 3, 4](如果您修复了其他部分),因为您没有切断末尾。

试试这个(实际上,使用rotate像@lurker说,但这里是如何解决你的原码):

(a[index..-1] + a[0...index]).cycle {|i| p i; sleep 1} 
0

你可以做到这一点没有Array#rotate。假设为:

a = [1, 2, 3, 4] 

起始指数分别2

enum = a.cycle 
2.times { enum.next } 
enum.each { |i| p i; sleep 1 }