Ruby数组重复值,如果下一个不存在,

时间:2012-08-20 10:29:19

标签: ruby-on-rails ruby arrays

我们如何在Ruby中实现这一目标?

xs = [1,2,3]
x = 5

然后我需要sum = 1+2+3+1+2 = 9

3 个答案:

答案 0 :(得分:13)

您拥有核心所需的抽象,只需将它们连接在一起:Enumerable#cycleEnumerable#takeEnumerable#inject

>> [1, 2, 3].cycle.take(5).inject(0, :+)
=> 9

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

答案 1 :(得分:3)

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}

答案 2 :(得分:0)

我不认为在Ruby中有一种特殊的方法可以做到这一点,但您可以使用以下代码段实现此目的。

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