文字列の連結、その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が飛び抜けて速い結果となりました。
結論は変数を含む複数の文字列の結合に関しては式展開を使うのがよいです。