私はメソッドをほとんど使用しません。代わりに、配列を逆方向にトラバースする必要があるときにreverse_each
呼び出します。reverse.each
だから私はちょうどいくつかのベンチマークを行いました、そして明らかreverse_each
によりもかなり速いですreverse.each
。
- これは、使用時に逆配列を反復処理する前に逆配列を作成することに関連する時間の要素があるため
reverse.each
ですか?
ただし、サイズ4の配列に対する1,000万回の反復の私の例(以下)では、TIME(reverse) + TIME(each) - TIME(reverse.each) ~ 1.2 seconds
この時間差は、配列のサイズに関係なく、多かれ少なかれ安定しています。最大100個の要素についてテストしました。
- この1秒の違いの原因は何ですか?
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