Ruby 配列のASCIIコードを文字列に変換する「pack」と「map」のパフォーマンスを計測する

Rubyで、benchmarkを使用して、配列のASCIIコードを文字列に変換する「pack」と「map」のパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。
環境
- OS windows10 pro 64bit
- ruby 2.7.2p137
パフォーマンス計測
benchmarkを使用して、「pack」と「map」で1000万回配列のASCIIコードを文字列に変換したパフォーマンスを計測するサンプルコードとなります。
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
#pack 3.954000 0.000000 3.954000 ( 3.955431)
#map 6.531000 0.000000 6.531000 ( 6.538415)
<2回目>
user system total real
#pack 4.000000 0.000000 4.000000 ( 4.184088)
#map 7.531000 0.016000 7.547000 ( 7.807174)
<3回目>
user system total real
#pack 3.891000 0.015000 3.906000 ( 4.051181)
#map 7.297000 0.063000 7.360000 ( 8.077803)
当然っぽいですが、packの方がパフォーマンスは良さそうです。
-
前の記事
javascript lodashを使って配列を条件により分割する 2021.09.21
-
次の記事
php 配列の先頭から値を追加する 2021.09.21
コメントを書く