Liste der Zeichenfolgen zu einer Zeichenfolge


206

Nehmen wir an, Sie haben eine:

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

In dieser verrückten funktionalen Welt leben wir in diesen Tagen, welche davon am besten geeignet ist, um eine Zeichenfolge zu erstellen, indem diese verkettet werden:

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);

oder Einfacher alter StringBuilder foreach

ODER gibt es einen besseren Weg?


9
Sieht aus wie 4 .Net wird auch eine string.Join (string, IEnumerable <string>) enthalten, so dass Sie die ToArray überspringen () msdn.microsoft.com/en-us/library/dd783876.aspx
luke

Antworten:


289

Ich würde mit Option A gehen:

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

Meine Argumentation ist, dass die Join-Methode zu diesem Zweck geschrieben wurde. Wenn Sie sich Reflector ansehen, werden Sie feststellen, dass unsicherer Code verwendet wurde, um ihn wirklich zu optimieren. Die anderen beiden ARBEITEN ebenfalls, aber ich denke, die Join-Funktion wurde für diesen Zweck geschrieben, und ich würde vermuten, die effizienteste. Ich könnte mich aber irren ...

Wie bei @Nuri YILMAZ ohne .ToArray(), aber das ist .NET 4+:

String.Join(String.Empty, los);

GA! Ich habe diese Option beim ersten Lesen nicht einmal gesehen.
Joel Coehoorn

2
3 mal schneller als der StringBuilder? Wow, ich dachte, es wäre schneller, wusste nicht, wie viel schneller. Es macht jedoch Sinn, es wird in unsicherem Code unter Verwendung von Zeigern ausgeführt, also ... macht Sinn.
BFree

8
nett! einzige Bemerkung: Join benötigt nicht los.ToArray (), da List <T> IEnumarable <T> umwandeln kann.
Nuri YILMAZ

8
@Nuri: Diese Frage wurde 08 gestellt, bevor .Net 4 aus war. Die Überlastung, die IEnumerable <T> benötigt, wurde in .Net 4 hinzugefügt.
BFree

2
String.Join in Verbindung mit String.Concat ist golden. Beispiel: 'String.Concat ("{", String.Join (",", m_Data), "}");'
KornMuffin

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

Wenn Sie nur die Zeichenfolgen verketten möchten, verwenden Sie string.Concat () anstelle von string.Join ().


18

Wenn Sie .net 4.0 verwenden, können Sie einen Sortierer verwenden:

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

10

String.Join () wird recht schnell implementiert und ist wahrscheinlich die beste Wahl, da Sie bereits eine Sammlung der betreffenden Zeichenfolgen haben. Vor allem ruft es: "Ich schließe mich einer Liste von Saiten an!" Immer nett.



5

Meine Stimme ist string.Join

Es müssen keine Lambda-Auswertungen und temporären Funktionen erstellt werden, weniger Funktionsaufrufe, weniger Stack-Pushing und Popping.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.