文字列から1つの文字列へのリスト


206

あなたが持っているとしましょう:

List<string> los = new List<string>();

このクレイジーな関数型の世界では、これらの1つがこれらを連結して1つの文字列を作成するのに最適である、これらの日に住んでいます。

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);

またはプレーンな古いStringBuilder foreach

またはより良い方法はありますか?


9
.Net 4にはstring.Join(string、IEnumerable <string>)も含まれているように見えるため、ToArray()をスキップできますmsdn.microsoft.com/en-us/library/dd783876.aspx
luke

回答:


289

私はオプションAで行きます:

String.Join(String.Empty, los.ToArray());

私の推論は、Joinメソッドがその目的のために作成されたためです。実際、Reflectorを見ると、安全でないコードが実際にそれを最適化するために使用されていることがわかります。他の2つも機能しますが、Join関数はこの目的のために作成されたと思います。おそらく最も効率的です。私は間違っているかもしれません...

@Nuri YILMAZなしで.ToArray()、ただしこれは.NET 4+です。

String.Join(String.Empty, los);

GA!最初はこのオプションを見たこともありませんでした。
Joel Coehoorn 2008年

2
StringBuilderの3倍の速度ですか?うわー、私はそれがより速くなると思っていました、どれだけ速くなるのか理解していませんでした。それは理にかなっていますが、ポインタを使用して安全でないコードで行われているので、理にかなっています。
BFree 2008年

8
いいね!備考のみ:List <T>はIEnumarable <T>をキャストできるため、Joinはlos.ToArray()を必要としません。
Nuri YILMAZ、2011年

8
@ヌリ:この質問は、.Net 4がリリースされる前の08に行われました。IEnumerable <T>を
取得する

2
String.Concatと組み合わせたString.Joinは最適です。例: 'String.Concat( "{"、String.Join( "、"、m_Data)、 "}");'
KornMuffin、2011年

51
string.Concat(los.ToArray());

文字列を連結するだけの場合は、string.Join()の代わりにstring.Concat()を使用します。


18

.net 4.0を使用している場合は、ソーターを使用できます。

String.Join<string>(String.Empty, los);

10

String.Join()は非常に高速に実装されており、既に問題の文字列のコレクションを持っているので、おそらく最良の選択です。何より、「文字列のリストに参加しています!」と叫びます。いつもいい。



5

私の投票は文字列です。

ラムダ評価や一時関数を作成する必要がなく、関数呼び出しが少なく、スタックのプッシュとポップが少なくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.