search
LoginSignup
8

More than 5 years have passed since last update.

posted at

updated at

splat 展開は少し遅い

プロを目指す人のためのRuby入門 を今読んでいる。

で。

ちょっと気になった事があった。

120ページ、4.7.8。

配列を連結する際に

a=[10,20,30]
b=[1,2,*a,3,4]

と書くことを薦めていた。

えーこれって遅かったりするんじゃないの? と思って測ってみた。

ソースコードは

ruby
require "benchmark"

a=Array.new(ARGV[0].to_i){ |x| x }

N=1000000

puts "%.3f" % ( Benchmark.realtime do
  N.times do
    b=[1,2,*a,3,4]
  end
end )

puts "%.3f" % ( Benchmark.realtime do
  N.times do
    b=[1,2]+a+[3,4]
  end
end )

こんな感じ。実行結果は

■ a.size==100

[1,2,*a,3,4] [1,2]+a+[3,4]
ruby 2.4.2 0.949 0.630
ruby 2.3.5 0.946 0.639
ruby 2.2.7 1.225 0.748

■ a.size==3

[1,2,*a,3,4] [1,2]+a+[3,4]
ruby 2.4.2 0.779 0.556
ruby 2.3.5 0.789 0.563
ruby 2.2.7 0.836 0.591

というわけで、やっぱり若干 splat 展開が遅い。
でももっと差が出ると思っていたので、大差ないことに驚いた。

2.2 と 2.3 の間で何かあったらしいことが伺える。ありがたや。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8