在Ruby中滚动数组

时间:2013-10-23 09:24:40

标签: ruby arrays ruby-2.0

我在Ruby 2.0中有一个数组:

arr=[1,2,3,4,5]

我希望能够做到这样的事情:

arr[6] #=> 2

那就是 - 滚动数组的末尾并重新启动。这可能吗?

2 个答案:

答案 0 :(得分:2)

这样可行:

arr = [1,2,3,4,5]
arr[6 % arr.size] #=> 2

答案 1 :(得分:1)

是的,可以通过这种方式修补Array课程:

module RollOver
  def [](index)
    super index % size
  end
end

Array.class_eval do
  prepend RollOver
end

array = [1, 2, 3, 4, 5]
puts array[6] # => 2

但建议。想象一下,由于这个补丁,可以打破多少代码。您最好为此类操作定义另一种方法。

<强>更新

如果仅对一个特定阵列需要此行为,那么最佳解决方案是:

array = [1, 2, 3, 4, 5]

def array.[](index)
  super index % size
end

puts array[6] # => 2

是的,Ruby允许: - )