15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

splat 展開は少し遅い

Last updated at Posted at 2017-11-28

プロを目指す人のための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 の間で何かあったらしいことが伺える。ありがたや。

15
8
5

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
  3. You can use dark theme
What you can do with signing up
15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?