ary-[nil] より ary.compact の方が良いと書いたものの、速度を調べていなかった。
で。
調べてみた。
まずはグラフ。対数目盛に注意。縦軸は時間。
なんかsrc.compact のグラフ形状が変な感じ。
概ね、5〜10 倍ぐらい速さが違う。
ruby は ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-darwin13.0] を使った。
まあ、速さのために compact を使うんじゃなくて「有意義なものだけにする」という処理に compact という名前がついているのでそれを使ったほうが良い、ということなんだけど、速さの面でもメリットがあるよ、という話なのでした。
もちろんゴルファーは a-[nil]
で。
あと。このグラフの元になったソースコードは以下のとおり。
require "benchmark"
(0..7).each do |ary_size_e|
ary_size =10**ary_size_e
src=Array.new(ary_size){ |n|
n%2==0 ? nil : n
}
trial = (10**7/ary_size ).ceil
puts "array size : #{ary_size},trial count : #{trial}"
Benchmark.bmbm(13) do |x|
x.report( "src-[nil]" ){ trial.times{ src - [nil] } }
x.report( "src.compact" ){ trial.times{ src.compact } }
end
end
続編が
http://qiita.com/Nabetani/items/623df6f738864b5ed005
にあります。