Вы можете использовать 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
значительно быстрее, чем ручное добавление в массив, когда массив несколько большой и операция выполняется много раз.