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?

maxfridbe
quelle
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);
BKostenlos
quelle
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 ().

Pent Ploompuu
quelle
18

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

String.Join<string>(String.Empty, los);
Mnieto
quelle
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.

J Cooper
quelle
7
los.Aggregate((current, next) => current + "," + next);
Landrady
quelle
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.

Tom Ritter
quelle