我们如何在 Ruby 中实现这一点?
xs = [1,2,3]
x = 5
那我需要那个sum = 1+2+3+1+2 = 9
您在核心中拥有所需的抽象,只需将它们连接在一起:Enumerable#cycle、Enumerable#take和Enumerable#inject:
>> [1, 2, 3].cycle.take(5).inject(0, :+)
=> 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