Esiste una funzione in C# per convertire rapidamente alcune raccolte in stringhe e separare i valori con delimitatore?C# Lista <string> a stringa con delimitatore
Ad esempio:
List<string> names
->string names_together = "John, Anna, Monica"
Esiste una funzione in C# per convertire rapidamente alcune raccolte in stringhe e separare i valori con delimitatore?C# Lista <string> a stringa con delimitatore
Ad esempio:
List<string> names
->string names_together = "John, Anna, Monica"
È possibile utilizzare String.Join
. Se si dispone di un List<string>
quindi è possibile chiamare ToArray
prima:
List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());
In .NET 4 non occorre il ToArray
più, poiché non v'è un sovraccarico di String.Join
che accetta un IEnumerable<string>
.
Si può anche fare questo con LINQ se vuoi
var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);
Anche se io preferisco la sintassi non LINQ in risposta di Quartermeister e penso Aggregate
potrebbe eseguire più lenti (probabilmente più operazioni di concatenazione di stringhe).
List<string> targets = new List<string>();
var InboxChecked = true;
var BannerChecked = false;
var EmailChecked = true;
if (InboxChecked)
{
targets.Add("Inbox");
}
if (BannerChecked)
{
targets.Add("Banner");
}
if (EmailChecked)
{
targets.Add("Email");
}
var index = 0;
if (targets.Any())
{
var aggregate = targets.Aggregate((s1, s2) =>
{
return ++index == targets.Count - 1 ? s1 + " and " + s2 : s1 + ", " + s2;
});
// aggregate.Dump();
}
// returns -> Inbox and Email
Perché è qui? Ha a malapena qualcosa a che fare con l'OP ...? – Assimilater
Grazie per le risposte rapide, entrambi funzionano bene. Hai ragione, ho eseguito una piccola misurazione delle prestazioni utilizzando la classe Stopwatch e il modo linq è molto più lento: String.Join (",", names.ToArray()); -> ha preso 18 ticks Aggregate ((a, b) => a + "," + b) -> ha preso 736 ticks – nan
Sì, penso che "Aggregate" sia migliore per le operazioni di tipo Math. Con le stringhe questa operazione è simile a 'per ciascuna e basta accodare a una stringa che è molto lenta in inefficienza perché stai creando una nuova stringa per ogni elemento che esiste nell'elenco. – Bob
Si noti che Aggregate senza un valore di inizializzazione genererà un'eccezione InvalidOperationException se il contenitore è vuoto. Utilizzare la versione con seeding Aggregate (seed, func) per evitare il codice di gestione degli errori oi controlli condizionali. String.Join non gira su vuoto, quindi non è richiesto alcun seme o codice aggiuntivo ... in più non richiede Linq e la sintassi è un po 'più chiara. – Huacanacha