2010-01-08 6 views
3

Je cherche une doublure ici, en commençant par:Quelle est la meilleure façon de convertir une liste d'entiers à une chaîne séparés par des virgules nombres en C#

int [] a = {1, 2, 3}; 
List<int> l = new List<int>(a); 

et se terminant avec

String s = "1,2,3"; 
+0

Désolé, je ne pouvais pas être clair, je voudrais convertir 'l', pas' a'. Donc, pour reformuler cela, je dirais: Liste l = nouvelle Liste (); l.Ajouter (1); l.Ajouter (2); l.Ajouter (3); Et je voudrais finir avec '" 1,2,3 "' – Gyuri

+0

Ou dire 'Liste l = nouvelle liste {1, 2, 3};' –

Répondre

2
string.Join(",", l.ConvertAll(i => i.ToString()).ToArray()); 

Ceci suppose que vous compilez sous .NET 3.5 w/Linq.

+1

Dans ce cas, les méthodes 'ConvertAll' et' ToArray' n'ont rien à voir avec LINQ: elles appartiennent au type 'List ' lui-même. (Mais si vous vouliez que ce code soit compilé avec les anciennes versions de C#, vous auriez besoin d'utiliser la syntaxe 'delegate' plutôt qu'un lambda pour votre argument de méthode.) – LukeH

+1

Pour .NET 4, vous pouvez simplement utiliser' string.Join (",", l) ': http://msdn.microsoft.com/en-us/library/dd992421.aspx –

9
String s = String.Join(",", a.Select(i => i.ToString()).ToArray()); 
+0

+1, et vous étiez le premier. –

4
String.Join(",", l); 
6
string s = string.Join(",", Array.ConvertAll(a, i => i.ToString())); 

ou .NET 4.0, vous pouvez essayer (bien que je ne suis pas sûr que ce sera la compilation):

string s = string.Join(",", a); 
2
int[] array = {1,2,3}; 

string delimited = string.Join(",", array); 
+0

vous ne pouvez pas string.join sur un tableau int []. cela ne compile pas. EDIT: hmm .. selon un autre post, vous pouvez, si vous êtes en .NET 4.0. Vous devriez spécifier cela comme une mise en garde dans votre message. –

0

Une autre façon de le faire:

string s = a.Aggregate("", (acc, n) => acc == "" ? n.ToString() : acc + "," + n.ToString()); 
+0

C'est vrai, cela fera l'affaire, bien que ce soit considérablement plus lent que les différentes réponses 'String.Join' sur des listes plus grandes. –

1
l.Select(i => i.ToString()).Aggregate((s1, s2) => s1 + "," + s2) 
-1

Je sais que vous êtes à la recherche d'une doublure, mais si vous créez une méthode d'extension, toutes les utilisations futures sont un seul doublage. C'est une méthode que j'utilise.


public static string ToDelimitedString<T>(this IEnumerable<T> items, string delimiter) 
{ 
    StringBuilder joinedItems = new StringBuilder(); 
    foreach (T item in items) 
    { 
     if (joinedItems.Length > 0) 
      joinedItems.Append(delimiter); 

     joinedItems.Append(item); 
    } 

    return joinedItems.ToString(); 
} 

Pour votre liste, il devient: l.ToDelimitedString(",") j'ai ajouté une surcharge qui utilise toujours la virgule comme séparateur pour plus de commodité.

+0

Je ne suis pas le downvote, mais je ferai remarquer que c'est plus lent que String.Join ... –

Questions connexes