Elenco C # <stringa> in stringa con delimitatore


631

Esiste una funzione in C # per convertire rapidamente alcune raccolte in stringhe e separare i valori con delimitatore?

Per esempio:

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

Risposte:


1201

È possibile utilizzare String.Join. Se ne hai uno List<string>, puoi chiamare ToArrayprima:

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

In .NET 4 non è più necessario ToArray, poiché esiste un sovraccarico String.Joinche richiede un IEnumerable<string>.

risultati:


John, Anna, Monica


95

Puoi anche farlo con linq, se lo desideri

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

Anche se preferisco la sintassi non-linq nella risposta di Quartermeister e penso che Aggregatepotrebbe eseguire più lentamente (probabilmente più operazioni di concatenazione di stringhe).


19
Grazie per le risposte veloci, entrambi funzionano bene. Hai ragione ho fatto una piccola misurazione delle prestazioni usando la classe Stopwatch e la linq-way è molto più lenta: String.Join (",", names.ToArray ()); -> ha preso 18 tick Aggregate ((a, b) => a + "," + b) -> ha preso 736 tick
nan

2
Sì, penso che Aggregatesia meglio per le operazioni di tipo matematico. Con le stringhe questa operazione è simile for eachall'ing e all'aggiunta di una stringa molto lenta e inefficiente perché si sta creando una nuova stringa per ogni elemento presente nell'elenco.
Bob,

Si noti che Aggregate senza un valore seed genererà un InvalidOperationException se il contenitore è vuoto. Utilizzare la versione con seeding Aggregate (seed, func) per evitare errori nella gestione del codice o controlli condizionali. String.Join non viene svuotato, quindi non è necessario alcun seed o codice aggiuntivo ... inoltre non richiede Linq e la sintassi è un po 'più chiara.
Huacanacha,

1
Aggregato nell'esempio sopra potrebbe funzionare più velocemente se utilizzerai StringBuilder. L'uso di '+' per eseguire la concatenazione multipla non è raccomandato. Vedi la sezione Note qui ( msdn.microsoft.com/en-us/library/… )
Ilya Denisov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.