Existe-t-il un moyen de convertir une liste en une chaîne séparée par des virgules?
Je sais que je peux simplement le construire et le construire, mais je pense que certains d’entre vous ont une façon plus cool de le faire?
Je veux vraiment apprendre ces types de "trucs", alors expliquez ou associez-vous aux documents sur la méthode que vous utilisez.
List<int> list = ...;
string.Join(",", list.Select(n => n.ToString()).ToArray())
La solution simple est
List<int> list = new List<int>() {1,2,3};
string.Join<int>(",", list)
Je l'ai utilisé tout à l'heure dans mon code, en travaillant de façon funtastic.
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray()));
Pour environ un milliard de solutions à une version légèrement plus compliquée de ce problème (dont beaucoup sont lentes, buggées ou ne compilent même pas), voir les commentaires de mon article sur ce sujet:
http://blogs.msdn.com/ericlippert/archive/2009/04/15/comma-quibbling.aspx
et le commentaire StackOverflow:
Le défi d'Eric Lippert "des virements à la virgule", meilleure réponse?
Pour plus de fraîcheur, je voudrais en faire une méthode d’extension sur IEnumerable <T> afin que cela fonctionne sur n’importe quel IEnumerable:
public static class IEnumerableExtensions {
public static string BuildString<T>(this IEnumerable<T> self, string delim) {
return string.Join(",", self)
}
}
Utilisez-le comme suit:
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.BuildString(", "));
Semble raisonnablement rapide.
IList<int> listItem = Enumerable.Range(0, 100000).ToList();
var result = listItem.Aggregate<int, StringBuilder, string>(new StringBuilder(), (strBuild, intVal) => { strBuild.Append(intVal); strBuild.Append(","); return strBuild; }, (strBuild) => strBuild.ToString(0, strBuild.Length - 1));
Mon entrée "intelligente":
List<int> list = new List<int> { 1, 2, 3 };
StringBuilder sb = new StringBuilder();
var y = list.Skip(1).Aggregate(sb.Append(x.ToString()),
(sb1, x) => sb1.AppendFormat(",{0}",x));
// A lot of mess to remove initial comma
Console.WriteLine(y.ToString().Substring(1,y.Length - 1));
Simplement pas compris comment ajouter conditionnellement la virgule.
vous pouvez utiliser la bibliothèque System.Linq; C'est plus efficace:
using System.Linq;
string str =string.Join(",", MyList.Select(x => x.NombreAtributo));