C # Listet <Zeichenfolge> auf, die mit einem Trennzeichen versehen werden soll


631

Gibt es in C # eine Funktion zum schnellen Konvertieren einer Sammlung in Zeichenfolgen und zum Trennen von Werten mit Trennzeichen?

Zum Beispiel:

List<string> names -> string names_together = "John, Anna, Monica"

Antworten:


1201

Sie können verwenden String.Join. Wenn Sie eine haben List<string>, können Sie ToArrayzuerst anrufen :

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());

In .NET 4 brauchen Sie das nicht ToArraymehr, da es eine Überlastung gibt String.Join, die ein IEnumerable<string>.

Ergebnisse:


John, Anna, Monica


95

Sie können dies auch mit linq tun, wenn Sie möchten

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);

Obwohl ich die Nicht-Linq-Syntax in Quartermeisters Antwort bevorzuge und denke, dass sie Aggregatemöglicherweise langsamer ausgeführt wird (wahrscheinlich mehr Verkettungsoperationen für Zeichenfolgen).


19
Vielen Dank für die schnellen Antworten, beide funktionieren gut. Sie haben Recht, ich habe eine kleine Leistungsmessung mit der Stopwatch-Klasse durchgeführt und der Linq-Weg ist viel langsamer: String.Join (",", names.ToArray ()); -> nahm 18 Zecken Aggregat ((a, b) => a + "," + b) -> nahm 736 Zecken
nan

2
Ja, ich denke, es Aggregateist besser für Operationen vom Typ Mathe. Bei Zeichenfolgen ähnelt diese Operation dem for eachAnhängen und Anhängen an eine Zeichenfolge, die sehr langsam und ineffizient ist, da Sie für jedes in der Liste vorhandene Element eine neue Zeichenfolge erstellen.
Bob

Beachten Sie, dass Aggregat ohne Startwert eine InvalidOperationException auslöst, wenn der Container leer ist. Verwenden Sie das Aggregat der gesetzten Version (Startwert, Funktion), um Fehlerbehandlungscode oder bedingte Überprüfungen zu vermeiden. String.Join wird nicht leer geworfen, daher ist kein Startwert oder zusätzlicher Code erforderlich. Außerdem ist kein Linq erforderlich, und die Syntax ist etwas klarer.
Huacanacha

1
Das Aggregat im obigen Beispiel funktioniert möglicherweise schneller, wenn Sie StringBuilder verwenden. Die Verwendung von '+' zur Durchführung mehrerer Verkettungen wird nicht empfohlen. Siehe Abschnitt Bemerkungen hier ( msdn.microsoft.com/en-us/library/… )
Ilya Denisov
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.