我有类似的代码
@a.each{ |n|
if n == i then
@b.push n
n = 2*n
end
}
我想遍历一个数组@a
,如果某些条件n == i
为真,则使用当前元素n
来做@b.push n
,然后将其更新n = 2*n
到位。我如何迭代选择和修改?
@a.each.with_index do |n, j|
next unless n == i
@b.push(i)
@a[j] = 2 * i
end
如果数组很大,NArray 可以非常快地做到这一点:
require 'narray'
# Some sample data:
a = NArray.int(100000).random(10)
i = 8
# b is a "boolean" array that can be used to select or modify
# only certain elements in a
b = a.eq i
a[b] *= 2
如果您的初始数组@a
很大,并且您担心性能,您可能想尝试一下。
使用each_with_index
已解决的问题
@a.each_with_index{ |n,q|
if n == i then
@b.push n
@a[q] = 2*n
end
}
@a.each_with_index do |n, x|
if n == i
@b.push n
@a[x] = 2*n
end
end
希望下面的工作:
@a.map!{|n| n == i ? (@b.push n; 2*n) : n }