下面是我的代码:
array = [1, 2, 3, 4, 5, 6]
multiplie_array = [array[0]*2, array[1], array[2]*2, array[3], array[4]*2, array[5]]
=> [2, 2, 6, 4, 10, 6]
所以结果很好,但是请想象一下此代码是由一百万个元素组成的数组的。
我的问题:如何根据特定的索引遍历数组然后相乘?
答案 0 :(得分:1)
您可以通过mapping您的数组with an index来实现这一点:
[1, 2, 3, 4, 5, 6].map.with_index { |el,i| i.even? ? el * 2 : el }
# => [2, 2, 6, 4, 10, 6]
偶数索引处的每个元素都将乘以2
,每个奇数元素都将保持不变。
答案 1 :(得分:1)
这里有两种无需索引的方法。
arr = [1, 2, 3, 4, 5, 6]
#1
tf = [2, 1].cycle
#=> #<Enumerator: [2, 1]:cycle>
arr.map { |el| el*tf.next }
#=> [2, 2, 6, 4, 10, 6]
请参见Array#cycle。
#2
n = 1
arr.map { |el| (n = 3-n)*el }
#=> [2, 2, 6, 4, 10, 6]