Ruby 配列から指定した数だけ配列を取得する処理で「take」と「first」と「ドット」のパフォーマンスを計測する

Ruby 配列から指定した数だけ配列を取得する処理で「take」と「first」と「ドット」のパフォーマンスを計測する

Rubyで、benchmarkを使用して、配列から指定した数だけ配列を取得する処理で「take」と「first」と「ドット」のパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows11 pro 64bit
  • ruby 3.1.2p20

パフォーマンス計測

benchmarkを使用して、「take」と「first」と「ドット」を使用して、配列から指定した数だけ配列を取得するコードを10万回実行したパフォーマンスを計測するサンプルコードとなります。

require "benchmark"

# 繰り返し回数 100万回
i = 1_000_000

arr = [1, 2, 3, 4, 5]

# 10は、reportラベルに使用する桁数
Benchmark.bm 10 do |r|
  r.report "#take" do
    i.times do
      arr.take(2)
    end
  end

  r.report "#first" do
    i.times do
      arr.first(2)
    end
  end

  r.report "#..." do
    i.times do
      arr[...2]
    end
  end

  r.report "#.." do
    i.times do
      arr[..1]
    end
  end
end

実行結果

<1回目>
                 user     system      total        real
#take        0.078000   0.000000   0.078000 (  0.093229)
#first       0.094000   0.000000   0.094000 (  0.091829)
#...         0.172000   0.000000   0.172000 (  0.160214)
#..          0.125000   0.000000   0.125000 (  0.129416)

<2回目>
                 user     system      total        real
#take        0.094000   0.000000   0.094000 (  0.095401)
#first       0.109000   0.000000   0.109000 (  0.133020)
#...         0.094000   0.000000   0.094000 (  0.111415)
#..          0.109000   0.000000   0.109000 (  0.112128)

<3回目>
                 user     system      total        real
#take        0.125000   0.000000   0.125000 (  0.133818)
#first       0.109000   0.000000   0.109000 (  0.099203)
#...         0.110000   0.000000   0.110000 (  0.119050)
#..          0.125000   0.000000   0.125000 (  0.117001)

「take」が一番良さそうです。