【问题标题】:Whats the fasted way to extract an array of nested objects from an array of objects in Ruby ?>从 Ruby 中的对象数组中提取嵌套对象数组的最快方法是什么?>
【发布时间】:2010-06-29 23:04:55
【问题描述】:

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

我想要一个 :images 数组,那么实现这一点的最快和最便宜的方法是什么。它只是在数组上迭代并将每个元素推入一个新数组,如下所示:

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

【问题讨论】:

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


    【解决方案1】:
    elements.map {|element| element.image}
    

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

    【讨论】:

    • 或符号到过程的热度(假设有问题的版本支持它)elements.map(&amp;:image)
    • 刚刚用elements.map(&amp;:image) 测试过,结果和手动追加到数组一样慢!
    【解决方案2】:

    您可以使用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 在数组有点大并且操作执行多次时比手动追加到数组要快得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多