Non uso quasi il metodo reverse_each
, ma invoco lo reverse.each
quando devo attraversare un array all'indietro. Quindi ho appena fatto un po 'di benchmark e apparentemente reverse_each
è significativamente più veloce di reverse.each
.Perché Array.reverse_each è più veloce di Array.reverse.each
- È questo perché c'è un elemento di tempo associato alla creazione di una matrice inversa prima iterazione attraverso di essa quando si utilizza
reverse.each
?
Tuttavia nel mio esempio (sotto) di 10 milioni di iterazioni TIME(reverse) + TIME(each) - TIME(reverse.each) ~ 1.2 seconds
per un array di dimensione 4. E questa differenza di tempo più o meno brevi stabile indipendentemente dalla dimensione della matrice. L'ho testato per un massimo di 100 elementi.
- Cosa rappresenta questa differenza di un secondo?
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
stesso a nswer, ancora più veloce :) +1 – apneadiving