前回は文字列を分割する方法を紹介したので、今回は分割されているものを結合する方法を紹介します。

+ と += 演算子で結合させる

単純に二つの文字列を結合させるだけなら

C#は足し算をする感覚で文字列を結合させることができるのでいいですね。これがC言語だと面倒なことになります。

もしC言語で挫折したかたはC#をお試しください。初心者にはC#がおすすめです。

もし結合させたい文字列がすでに配列内に格納されているのであればどうでしょうか?

この方法はあまりよくありません。理由は時間がかかるからです。この例では配列の要素数は2なので別に問題ないといえば問題ないのですが、配列の要素数が大きい場合は時間がかかります。+= でつなげていく方法は文字列の最後を調べないといけないのでそのぶん時間がかかるのです。扱う文字列が長くなると処理にかかる時間は「配列の要素数に比例して」ではなく、それ以上にかかるようになります。

StringBuilderを使う

StringBuilderを使うと += でつなげていく方法とは比較にならないくらい短時間で文字列の連結ができます。

String.Joinメソッドを使う

すでに連結したい文字列が配列として準備されているのであれば、String.Joinメソッドを使う方法もあります。

String.Joinメソッドの第一引数は連結するときに間にいれる文字列を指定します。間になにもいれずに連結するのであれば””を渡します。配列内の文字列を半角スペース区切りやカンマ区切りで出力したいときはString.Joinメソッドが一番便利かもしれません。

速いのはどれか?

処理にかかる時間が一番短いのはどれでしょうか? 要素数が多い文字列の配列を用意して実際に時間を計測してみます。

時間を計測するのであれば

まず、文字列の配列を生成するメソッドを作成します。そして最初は+=で連結した場合の処理時間を計測してみました。
配列の要素数が10000のときは62ミリ秒かかりました。これを倍の20000に増やすと246ミリ秒もかかりました。倍に増やすと処理に必要な時間は2倍どころかそれを大きく上回る結果になりました。大量のデータを扱うときはこの方法はあまりおすすめできないということになります。

ではStringBuilderを用いた方法とString.Joinメソッドを用いる方法ではどちらが速いのでしょうか? 配列の要素数を100万まで増やしてもStringBuilderを用いた場合は64ミリ秒しかかかりません。String.Joinメソッドを用いた場合はさらに短く48ミリ秒で処理がおわります。