从Ruby中的对象数组中提取嵌套对象数组的最快方法是什么?>

时间:2010-06-29 23:04:55

标签: ruby arrays iterator nested-sets nested-attributes

我有一个Elements数组,每个元素都有一个属性:image。

我想要一系列:图像,所以最快和最便宜的方式来实现这一目标。它只是对数组进行迭代并将每个元素推送到一个新数组中,如下所示:

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

2 个答案:

答案 0 :(得分:5)

elements.map {|element| element.image}

这应该与您的版本具有相同的性能,但更简洁,更具惯用性。

答案 1 :(得分:3)

您可以使用Benchmark module来测试这些事情。我对原始代码运行了@ 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明显比手动附加到数组时快得多,当数组有点大并且操作执行多次时。