2012-10-12 21 views
12

reverse_each yöntemini kullanıyorum, bunun yerine bir diziyi geriye doğru kaydırmam gerektiğinde reverse.each numaralı telefonu arıyorum. Bu yüzden bazı kıyaslamalar yaptım ve görünüşe göre reverse_eachreverse.each'dan çok daha hızlı.Neden Array.reverse_each, Array.reverse.each öğesinden daha hızlı

  • Bu, reverse.each'u kullanırken yinelemeden önce bir ters dizi oluşturmayla ilişkili bir zaman unsuru olduğundan bu mu? Bununla birlikte (aşağıda) 10 milyon iterasyon büyüklüğü 4. dizisi ve daha fazla veya daha az kalır stabil bağımsız dizinin büyüklüğü bu zaman farkı TIME(reverse) + TIME(each) - TIME(reverse.each) ~ 1.2 seconds benim örnekte

. 100 elemente kadar test ettim.

  • Bu bir ikinci fark nedir?

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 

cevap

7

Kesinlikle ters dizi oluşturma ile ilişkilendirerek zaman ile ilgisi var söyleyebilirim! Sadece çok küçük diziler denediniz (100 elementli bir dizi hala küçük bir dizidir). Eğer daha büyük dizilerle çalışırsanız (örneğin 10k elemanları), farkın gerçekten farkına varacaksınız.

+0

Aynı a Daha hızlı, daha hızlı :) +1 – apneadiving

İlgili konular