将现有数组中的每第3个元素相乘

时间:2016-03-12 13:52:33

标签: ruby

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

4 个答案:

答案 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]
相关问题