-4

次のようなコードがあります

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

array を反復処理したいのですが@a、条件n == iが真の場合は、現在の要素nを使用して do を実行し@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 に答える