如何乘以現有數組中的每個第3個元素。將現有數組中的每個第3個元素相乘
下面的代碼給我如預期的輸出[6, 12, 18, 24]
。
但是如何更新myArr
值,而無需創建新的數組: [1,2,6,4,5,12,7,8,18,10,11,24,13,14]
myArr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
res = myArr[2].step(myArr.length-1, 3).map{|val| val*2}
如何乘以現有數組中的每個第3個元素。將現有數組中的每個第3個元素相乘
下面的代碼給我如預期的輸出[6, 12, 18, 24]
。
但是如何更新myArr
值,而無需創建新的數組: [1,2,6,4,5,12,7,8,18,10,11,24,13,14]
myArr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
res = myArr[2].step(myArr.length-1, 3).map{|val| val*2}
看起來是這樣做的:
0.upto(myArr.length - 1) {|i| myArr[i] *= 2 if i % 3 == 2}
只是多了一個除了保羅的回答解決方案:
myArr.map!.with_index{|k,i| i % 3 == 2 ? k * 2 : k }
myArr.each_index{|i| myArr[i] *= 2 if i% 3 == 2}
arr = [1,1,1,1,1,1,1,1,1]
factor = 2
every = 3
((every-1)...arr.size).step(every) { |i| arr[i] *= factor }
arr #=> [1,1,2,1,1,2,1,1,2]
另一種方式:
mult = ([1]*(every-1)).push(fac).cycle
#=> #<Enumerator: [1,1,2].cycle>
arr.map! { |e| e*mult.next }
#=> [1,1,2,1,1,2,1,1,2]