質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.80%

C# string配列の要素間に文字列を追加したい

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 5,921

score 25

C#でstring配列の要素間に文字列を追加したいです。

具体的に言いますと
string[] array = { "One", "Two", "Three", "Four", "Five" };
という配列を
One\nTwo\nThree\nFour\nFive
のようにしたいです。(例として改行にしましたが、普通の文字列です)

とりあえずとして使っている今のコードです。

string[] array = { "One", "Two", "Three", "Four", "Five" };
string resStr = "";
string addStr = "\n";
foreach (var s in array)
  resStr += s + addStr;
resStr = resStr.Substring(0, resStr.Length - addStr.Length);


かなり酷いコードになっているとは思いますが、これしか思いつきませんでした・・・。

LINQでなら、要素の間に要素を追加する、みたいなすごい挙動ができるのかな・・・とも思いましたが、分かりませんでした・・・。

このように、要素の間に要素を追加してしまったも大丈夫なのですが。
string[] array = { "One", "\n", "Two", "\n", "Three", "\n", "Four", "\n", "Five" };

どうかこのコードをスッキリとしたコードに変える方法を教えていただけないでしょうか。
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

string.Join("\n", array);

こんな感じでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/28 21:30

    > crowmtさん
    Joinメソッドとか素で忘れてました・・・
    今回の用途として正に適切ですね。

    キャンセル

  • 2016/09/28 21:40

    今日たまたま、仕事でVB.netにて配列を連結させていました。
    お役に立てれば幸いです。

    キャンセル

  • 2016/09/28 22:27

    こんなにも簡単に記述ができるなんて思っていませんでした・・・。本当に驚きました。
    ありがとうございました。

    キャンセル

+2

要素の追加の回答にはならないですが、
反復した文字列連結が行われる処理ではStringBuilderクラスを使う方が見た目も処理効率と良さげです。

ちなみにあまり大差はないですが、
僕だったら下記のように書きます。

string[] array = { "One", "Two", "Three", "Four", "Five" };
StringBuilder sb = new StringBuilder();
string separator = "hoge";
int length = separator.Length;
string format = "{0}" + separator;

foreach (var s in array) {
  sb.AppendFormat(format, s);
}
// 余計な末尾はここで消し去る
sb.Length -= length;
string result = sb.ToString();

追記

よくよく考えなくても、
さっき掲示したコードでAppendFormatを使うメリットがないので、
やり方を変えたコードを下記に追記します。
(String.Joinメソッドの方が良いには変わりませんが)

string[] array = { "One", "Two", "Three", "Four", "Five" };
StringBuilder sb = new StringBuilder();
string separator = "hoge";
int length = separator.Length;

foreach (var s in array) {
  sb.Append(s).Append(separator);
}
// 余計な末尾はここで消し去る
sb.Length -= length;
string result = sb.ToString();

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/28 22:28

    StringBuilder を使う方法もあるのですね。とりあえずは解決しましたが、何かのために覚えておきたいと思います。ありがとうございました。

    キャンセル

  • 2016/09/28 22:31

    > mystasly48さん
    最初に掲示したサンプルは、
    StringBuilder使ったやり方で無駄に遠回りしちゃってました。

    も少しコードを簡単に書けるので追加しときますね。
    (StringBuilder使った例のままですが)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る