2010-08-24 50 views
23

Ce que je préfère est quelque chose comme:C#: chaîne [] à chaîne délimitée. Y a-t-il un one-liner?

string[] strArray = {"Hi", "how", "are", "you"}; 
string strNew = strArray.Delimit(chDelimiter); 

Cependant, il n'y a pas une telle fonction. J'ai regardé MSDN et rien ne me semblait être une fonction qui ferait la même chose. J'ai regardé StringBuilder, et encore, rien ne m'a marqué. Est-ce que quelqu'un sait d'un doublure pas trop compliqué pour faire un tableau une chaîne délimitée. Merci pour l'aide de vos gars.

MISE À JOUR: Wow, lol, mon mauvais. Je continuais à regarder le .Join sur le tableau lui-même et ça me dérangeait énormément. Je n'ai même pas regardé String.Join. Merci les gars. Une fois que cela me permet d'accepter, je le ferai. Preciate l'aide.

+0

Quelque chose comme ' String.Join (chDelimiter, array); 'Vous devrez peut-être d'abord transformer char en une chaîne. Il y a aussi une version générique. Je soupçonne que LINQ peut le faire d'une manière élégante aussi bien. –

+0

Oui, j'ai continué à regarder la mauvaise jointure. Merci. – XstreamINsanity

Répondre

43

Pour les tableaux, vous pouvez utiliser:

string.Join(", ", strArray); 

Personnellement, j'utilise une méthode d'extension que je peux appliquer aux collections énumérables de tous types:

public static string Flatten(this IEnumerable elems, string separator) 
{ 
    if (elems == null) 
    { 
     return null; 
    } 

    StringBuilder sb = new StringBuilder(); 
    foreach (object elem in elems) 
    { 
     if (sb.Length > 0) 
     { 
      sb.Append(separator); 
     } 

     sb.Append(elem); 
    } 

    return sb.ToString(); 
} 

... Ce que j'utilise comme si:

strArray.Flatten(", "); 
+0

Belle fonction. Mon objectif principal est d'avoir un fichier délimité, de le mettre dans un programme pour éditer avec SQL Lite comme méthode de stockage, puis de le renvoyer dans un fichier délimité. Une fois qu'il me laisse accepter, je le ferai. Merci. – XstreamINsanity

+8

Dans NET4.0, il existe une surcharge 'string.Join' que vous pouvez utiliser avec n'importe quelle collection' IEnumerable', http://msdn.microsoft.com/en-us/library/dd992421.aspx –

+0

@Danko: Nice! Comme je déplace mes applications vers .NET 4, je vais définitivement favoriser la méthode que vous avez suggérée. Merci! – kbrimington

4

Utilisez String.Join

string[] strArray = {"Hi", "how", "are", "you"}; 
string strNew = String.Join("," strArray); 
6

Vous pouvez utiliser la méthode String.Join statique:

String strNew = String.Join(chDelimiter, strArray);


EDIT: En réponse au commentaire: Sur la base de votre commentaire, vous pouvez prendre plusieurs tableaux, concaténer les ensemble, puis rejoignez tout le tableau résultant. Vous pouvez le faire en utilisant la méthode d'extension IEnumerable Concat. Voici un exemple:

//define my two arrays... 
string[] strArray = { "Hi", "how", "are", "you" }; 
string[] strArray2 = { "Hola", "como", "esta", "usted" }; 

//Concatenate the two arrays together (forming a third array) and then call join on it... 
string strNew = String.Join(",", strArray.Concat(strArray2)); 

Espérons que cela aide!

+0

Ce qui me dérange, c'est que si quelque chose est une chaîne [], alors quand je le fais, je devrais avoir cette option disponible. Je devrais avoir l'option pour joindre des tableaux et l'option pour joindre ce tableau. :) – XstreamINsanity

+0

Oui, j'ai vu ça. Je ne voulais pas nécessairement dire que j'en ai besoin, je dis que quand vous avez une chaîne [] et que vous suivez la variable avec .Join (strArray.Join(), vous n'obtenez pas la jointure (délimiteur de chaîne, chaîne [] strArray) option, vous obtenez d'autres options de jointure Je pense que la chaîne [] devrait aussi avoir l'option .Join (délimiteur de chaîne, chaîne [] strArray), mais ce serait .Join (délimiteur de chaîne) car il est déjà Est-ce que je l'ai dit clairement parce que je me suis confondu :) – XstreamINsanity

5

Jetez un oeil à String.Join().

Votre échantillon doit ressembler à ceci:

 string delimiter = "," 
     string[] strArray = { "Hi", "how", "are", "you" }; 
     string strNew = String.Join(delimiter, strArray); 
1

dans ce cas, String.Join() est sans doute la meilleure façon d'aller, vous pouvez utiliser également LINQ si

var comSeparatedStrings = strings.Aggregate((acc, item) => acc + ", " + item); 
+0

L'agrégat est beaucoup plus lent, car il n'utilise pas StringBuilder dans les coulisses (iirc). –