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"

nan
quelle

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

Quartiermeister
quelle
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).

Bob
quelle
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