Casi no uso el método reverse_each
, sino que llamo al reverse.each
cuando tengo que atravesar una matriz hacia atrás. Así que acabo de hacer una evaluación comparativa y aparentemente reverse_each
es significativamente más rápido que reverse.each
.Por qué Array.reverse_each es más rápido que Array.reverse.each
- ¿Esto se debe a que hay un elemento de tiempo asociado a la creación de una matriz inversa antes de recorrerlo cuando usa
reverse.each
?
Sin embargo, en mi ejemplo (abajo) de 10 millones de iteraciones TIME(reverse) + TIME(each) - TIME(reverse.each) ~ 1.2 seconds
para una matriz de tamaño 4. Y esta diferencia de tiempo más o menos se mantiene estable con independencia del tamaño de la matriz. Lo he probado por hasta 100 elementos.
- ¿Cuál es la razón de esta segunda diferencia?
require 'benchmark'
number = 10000000
arr = (1..4).to_a
Benchmark.bm(13) do |x|
x.report("reverse.each") { number.times { arr.reverse.each {|x| x} } }
x.report("reverse_each") { number.times { arr.reverse_each {|x| x} } }
x.report("reverse") { number.times { arr.reverse } }
x.report("each") { number.times { arr.each {|x| x} } }
end
mismo a nswer, incluso más rápido :) +1 – apneadiving