Ruby on rails Ruby数组重复值,如果next不存在,

Ruby on rails Ruby数组重复值,如果next不存在,,ruby-on-rails,ruby,arrays,Ruby On Rails,Ruby,Arrays,我们如何在Ruby中实现这一点 xs = [1,2,3] x = 5 然后我需要这个sum=1+2+3+1+2=9 def get_sum_cyclic(array, number) sum = 0 0.upto(number - 1) do |i| sum += array[i % array.size] end return sum end 另一个选项是在一个范围内使用贴图: (0...5).map{|i| a[i % a.size]}.inject(0

我们如何在Ruby中实现这一点

xs = [1,2,3]
x = 5
然后我需要这个
sum=1+2+3+1+2=9

def get_sum_cyclic(array, number)
   sum = 0
   0.upto(number - 1) do |i|
     sum += array[i % array.size]
   end
   return sum
end
另一个选项是在一个范围内使用贴图:

(0...5).map{|i| a[i % a.size]}.inject(0){|t,v| t + v}

我不认为在Ruby中有什么特别的方法可以做到这一点,但是您可以通过下面的代码片段来实现这一点

(0..x).inject(0) do |sum, i|
  sum += arr[ i % arr.size ]
end

您在核心中有了所需的抽象,只需将它们连接在一起:,然后:


这就是/声明式方法:使用抽象(现有的或您自己实现的抽象),这样您就可以编写描述您正在做什么而不是如何做的代码。

非常感谢,完全忘记模。@izomorphius:最后一个片段非常好,只是我会编写更紧凑的
。inject(0,:+)
。非常好,尽可能简单。如果您为
+
;-)更改
+=
,我会+1这个
>> [1, 2, 3].cycle.take(5).inject(0, :+)
=> 9