2

Rubyでこれをどのように達成できますか?

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

それから私はそれが必要ですsum = 1+2+3+1+2 = 9

4

3 に答える 3

13

コアに必要な抽象化があり、それらを相互に接続するだけです:Enumerable#cycleEnumerable#take、およびEnumerable#inject

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

これが機能的/宣言型のアプローチです。抽象化(既存または自分で実装したもの)を使用して、実行方法ではなく実行内容を説明するコードを記述できるようにします。

于 2012-08-20T10:57:51.397 に答える
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}
于 2012-08-20T10:34:06.937 に答える
0

Rubyでそれを行う特別な方法はないと思いますが、次のスニペットでこれを実現できます。

(0..x).inject(0) do |sum, i|
  sum += arr[ i % arr.size ]
end
于 2012-08-20T10:34:49.117 に答える