-4

我有类似的代码

@a.each{ |n|
   if n == i then
      @b.push n
      n = 2*n
   end
}

我想遍历一个数组@a,如果某些条件n == i为真,则使用当前元素n来做@b.push n,然后将其更新n = 2*n到位。我如何迭代选择和修改?

4

5 回答 5

4
@a.each.with_index do |n, j|
  next unless n == i
  @b.push(i)
  @a[j] = 2 * i
end
于 2013-07-27T15:38:52.993 回答
2

如果数组很大,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很大,并且您担心性能,您可能想尝试一下。

于 2013-07-27T15:40:00.073 回答
1

使用each_with_index已解决的问题

@a.each_with_index{ |n,q|
   if n == i then
      @b.push n
      @a[q] = 2*n
   end
}
于 2013-07-27T15:36:21.967 回答
0
@a.each_with_index do |n, x|
  if n == i
    @b.push n
    @a[x] = 2*n
  end
end
于 2013-07-27T15:26:30.237 回答
0

希望下面的工作:

@a.map!{|n| n == i ? (@b.push n; 2*n) : n }
于 2013-07-27T15:55:56.007 回答