Ruby delete_ifとinjectのパフォーマンスを計測する

Ruby delete_ifとinjectのパフォーマンスを計測する

Rubyで、benchmarkを使用して、ハッシュより指定した条件でキーを削除できるdelete_ifとinjectのパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

パフォーマンス計測

benchmarkを使用して、delete_ifとinjectのパフォーマンスを計測するサンプルコードとなります。

require 'benchmark'

# 繰り返し回数
i = 10000000

# 10は、reportラベルに使用する桁数
Benchmark.bm 10 do |r|
  r.report '#delete_if' do    
    i.times do
        h = {'key1' => 1, 'key2' => 2, 'key3' => 3}
        h.delete_if{|k, v| k == "key1"} 
    end
  end

  r.report '#inject' do
    i.times do
        h = {'key1' => 1, 'key2' => 2, 'key3' => 3}
        h.reject!{|k, v| k == 'key1'} 
    end
  end
end

実行結果

<1回目>
                 user     system      total        real
#delete_if   3.797000   0.000000   3.797000 (  3.816592)
#inject      4.047000   0.000000   4.047000 (  4.093661)

<2回目>
                 user     system      total        real
#delete_if   4.062000   0.000000   4.062000 (  4.122050)
#inject      4.125000   0.000000   4.125000 (  4.137152)

<3回目>
                 user     system      total        real
#delete_if   3.969000   0.000000   3.969000 (  4.006842)
#inject      3.812000   0.000000   3.812000 (  3.802413)

大差がない結果となりました。