Rubyでこれをどのように達成できますか?
xs = [1,2,3]
x = 5
それから私はそれが必要ですsum = 1+2+3+1+2 = 9
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