ruby中选择和修改的迭代

ruby中选择和修改的迭代,ruby,iteration,Ruby,Iteration,我有类似的代码 @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, x| if n == i @b.push n @a[x] = 2*n end end @a.each_

我有类似的代码

@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, x|
  if n == i
    @b.push n
    @a[x] = 2*n
  end
end
@a.each_with_index{ |n,q|
   if n == i then
      @b.push n
      @a[q] = 2*n
   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很大,并且您担心性能,您可能想尝试一下。

希望下面的方法能够奏效:

@a.map!{|n| n == i ? (@b.push n; 2*n) : n }

你能澄清一下吗。。。在正确的位置你的意思是想把@a中的n值替换为2*n,这样@a现在就可以保存2*n而不是n了吗?为什么要就地保存而不是新数组?输入数组是否庞大?修改n的值似乎无法达到在@a上迭代n的目的。你的意图不清楚,是的。确切地
@a.map!{|n| n == i ? (@b.push n; 2*n) : n }