文字列の連結、その2

前回に引き続き、変数を含む3つの文字列を連結する場合はどの方法がよいのか調べてみます。結果の変数に格納する際に"+="を使うのは明らかに遅いのでconcatを使うことにします。

テスト1: "+"による連結

str = 'def'
for i in 1..100000
    buf = 'abc' + str + 'ghi'
end

テスト2: "<<"(concat)による連結

str = 'def'
for i in 1..100000
    buf = 'abc'
    buf << str
    buf << 'ghi'
end

テスト3: 式展開

str = 'def'
for i in 1..100000
    buf = "abc#{str}ghi"
end

テスト4: 配列のjoin

str = 'def'
for i in 1..100000
    buf = ['abc',str,'ghi'].join()
end

結果

テスト1 +による連結 0.306s
テスト2 個別にconcat 0.315s
テスト3 式展開 0.218s
テスト4 配列のjoin 0.333s

テスト3が飛び抜けて速い結果となりました。

結論は変数を含む複数の文字列の結合に関しては式展開を使うのがよいです。