Ruby key?とhas_key?、include?、member?のパフォーマンスを計測する

Ruby key?とhas_key?、include?、member?のパフォーマンスを計測する

Rubyで、benchmarkを使用して、ハッシュのキーや値の存在確認を行うことができるkey?とhas_key?、include?、member?のパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

パフォーマンス計測

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

require 'benchmark'

# 繰り返し回数(1000万回)
i = 10000000

# ハッシュを用意
h = {'key1' => 'val1', 'key2' => 'val2'}

# 10は、reportラベルに使用する桁数
Benchmark.bm 10 do |r|
  r.report '#key' do
    i.times do
        h.key?('key1')
    end
  end

  r.report '#has_key' do
    i.times do
        h.has_key?('key1')
    end
  end

  r.report '#include' do
    i.times do
        h.include?('key1')
    end
  end

  r.report '#member' do
    i.times do
        h.member?('key1')
    end
  end
end

実行結果

<1回目>
                 user     system      total        real
#key         1.125000   0.000000   1.125000 (  1.125168)
#has_key     1.297000   0.000000   1.297000 (  1.482281)
#include     1.172000   0.000000   1.172000 (  1.436044)
#member      1.219000   0.015000   1.234000 (  1.528597)

<2回目>
                 user     system      total        real
#key         1.360000   0.000000   1.360000 (  1.383897)
#has_key     1.484000   0.000000   1.484000 (  1.584512)
#include     1.250000   0.000000   1.250000 (  1.292942)
#member      1.438000   0.000000   1.438000 (  1.537328)

<3回目>
                 user     system      total        real
#key         1.360000   0.000000   1.360000 (  1.383897)
#has_key     1.484000   0.000000   1.484000 (  1.584512)
#include     1.250000   0.000000   1.250000 (  1.292942)
#member      1.438000   0.000000   1.438000 (  1.537328)

どれもほぼ差がない結果となりました。