2016-03-12 76 views
0

如何乘以现有数组中的每个第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} 

回答

1

看起来是这样做的:

0.upto(myArr.length - 1) {|i| myArr[i] *= 2 if i % 3 == 2} 
1

只是多了一个除了保罗的回答解决方案:

myArr.map!.with_index{|k,i| i % 3 == 2 ? k * 2 : k } 
2
myArr.each_index{|i| myArr[i] *= 2 if i% 3 == 2} 
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] 
相关问题