如何将现有数组中的每个第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 :(得分:2)
myArr.each_index{|i| myArr[i] *= 2 if i% 3 == 2}
答案 1 :(得分:1)
看起来就是这样:
0.upto(myArr.length - 1) {|i| myArr[i] *= 2 if i % 3 == 2}
答案 2 :(得分:1)
除了保罗的答案之外,还有一个解决方案:
myArr.map!.with_index{|k,i| i % 3 == 2 ? k * 2 : k }
答案 3 :(得分:1)
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]