Ja prawie nie używam metody reverse_each
, zamiast tego wzywam reverse.each
, kiedy potrzebuję przejść tablicę do tyłu. Po prostu wykonałem kilka testów porównawczych i pozornie reverse_each
jest znacznie szybszy niż reverse.each
.Dlaczego Array.reverse_each jest szybszy niż Array.reverse.each
- Czy to dlatego, że istnieje element czasu związany z tworzeniem tablicy odwrotnej przed jej iteracją podczas korzystania z
reverse.each
?
Jednak w moim przykładzie (poniżej) z 10 milionów iteracji TIME(reverse) + TIME(each) - TIME(reverse.each) ~ 1.2 seconds
dla tablicy 4. WIELKOŚĆ i ta różnica czasu mniej lub bardziej jest stabilny niezależnie od wielkości tablicy. Przetestowałem to na 100 elementów.
- Co odpowiada za tę jedną drugą różnicę?
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
to samo nswer, jeszcze szybciej :) +1 – apneadiving