Ruby 条件を指定して配列の最大値を求める「max」と「max_by」のパフォーマンスを計測する

Ruby 条件を指定して配列の最大値を求める「max」と「max_by」のパフォーマンスを計測する

Rubyで、benchmarkを使用して、条件を指定して配列の最大値を求める「max」と「max_by」のパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

パフォーマンス計測

benchmarkを使用して、「max」と「max_by」を使用して、文字列と数値が混在している配列[1, 2, “3”]から全て数値に変換して最大値を求めるコードを1000万回実行したパフォーマンスを計測するサンプルコードとなります。

require 'benchmark'

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

arr = [97, 98, 99]

# 10は、reportラベルに使用する桁数
Benchmark.bm 10 do |r|

  r.report '#pack' do
    i.times do
      arr.pack("c*") 
    end
  end

  r.report '#map' do
    i.times do
      arr.map {|x| x.chr}.join
    end
  end

end

実行結果

<1回目>
                 user     system      total        real
#max         3.891000   0.000000   3.891000 (  3.999200)
#max_by      5.468000   0.015000   5.483000 (  5.521457)

<2回目>
                 user     system      total        real
#max         4.015000   0.016000   4.031000 (  4.393769)
#max_by      5.672000   0.015000   5.687000 (  5.915374)

<3回目>
                 user     system      total        real
#max         3.937000   0.000000   3.937000 (  4.069262)
#max_by      5.406000   0.000000   5.406000 (  5.606742)

maxの方がパフォーマンスは良さそうです。