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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

2回答

8102閲覧

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

mystasly48

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

1クリップ

投稿2016/09/28 12:08

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

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

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

csharp

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

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

C#

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

こんな感じでしょうか。

投稿2016/09/28 12:24

crowmt

総合スコア402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Panzer_vor

2016/09/28 12:30

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

2016/09/28 12:40

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

2016/09/28 13:27

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

0

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

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

C#

1 string[] array = { "One", "Two", "Three", "Four", "Five" }; 2StringBuilder sb = new StringBuilder(); 3string separator = "hoge"; 4int length = separator.Length; 5string format = "{0}" + separator; 6 7foreach (var s in array) { 8 sb.AppendFormat(format, s); 9} 10// 余計な末尾はここで消し去る 11sb.Length -= length; 12string result = sb.ToString();

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

C#

1 string[] array = { "One", "Two", "Three", "Four", "Five" }; 2StringBuilder sb = new StringBuilder(); 3string separator = "hoge"; 4int length = separator.Length; 5 6foreach (var s in array) { 7 sb.Append(s).Append(separator); 8} 9// 余計な末尾はここで消し去る 10sb.Length -= length; 11string result = sb.ToString();

投稿2016/09/28 12:26

編集2016/09/28 13:39
Panzer_vor

総合スコア1636

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mystasly48

2016/09/28 13:28

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

2016/09/28 13:31

> mystasly48さん 最初に掲示したサンプルは、 StringBuilder使ったやり方で無駄に遠回りしちゃってました。 も少しコードを簡単に書けるので追加しときますね。 (StringBuilder使った例のままですが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問