我有一个Elements数组,每个元素都有一个属性:image。
我想要一系列:图像,所以最快和最便宜的方式来实现这一目标。它只是对数组进行迭代并将每个元素推送到一个新数组中,如下所示:
images = []
elements.each {|element| images << element.image}
答案 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
明显比手动附加到数组时快得多,当数组有点大并且操作执行多次时。