2

要素の配列があり、各要素にはプロパティ :image があります。

画像の配列が欲しいので、これを実現するための最も迅速で安価な方法は何ですか。配列を繰り返し処理し、各要素を新しい配列にプッシュするだけですか。次のようになります。

images = []
elements.each {|element| images << element.image}
4

2 に答える 2

5
elements.map {|element| element.image}

これは、お使いのバージョンとほぼ同じパフォーマンスを持つはずですが、やや簡潔で慣用的です。

于 2010-06-29T23:10:08.697 に答える
3

Benchmark モジュールを使用して、これらの種類のものをテストできます。次のように、元のコードに対して @sepp2k のバージョンを実行しました。

require 'benchmark'

class Element
  attr_accessor :image

  def initialize(image)
    @image = image
  end
end

elements = Array.new(500) {|index| Element.new(index)}

n = 10000

Benchmark.bm do |x|
  x.report do
    n.times do
      # Globalkeith's version
      image = []
      elements.each {|element| image << element.image}
    end
  end
  # sepp2k's version
  x.report { n.times do elements.map {|element| element.image} end }
end

私のマシンの出力は一貫して(3回以上実行した後)これに非常に近くなりました:

   user     system      total        real
2.140000   0.000000   2.140000 (  2.143290)
1.420000   0.010000   1.430000 (  1.422651)

したがってmap、配列がやや大きく、操作が何度も実行される場合、配列に手動で追加するよりもはるかに高速であることを示しています。

于 2010-06-29T23:49:50.020 に答える