web-dev-qa-db-fra.com

Conversion d'une liste <int> en une chaîne séparée par des virgules

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.

89
mrblah
List<int> list = ...;
string.Join(",", list.Select(n => n.ToString()).ToArray())
162
Pavel Minaev

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.

78
Nitin Daware
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray()));
9

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?

6
Eric Lippert

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(", "));
3
cdiggins

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));
1
Gregory

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.

1
Larsenal

vous pouvez utiliser la bibliothèque System.Linq; C'est plus efficace: 

using System.Linq;
string str =string.Join(",", MyList.Select(x => x.NombreAtributo));
0
Maurico Bello