2010-08-24 16 views
23

Was würde ich es vorziehen, ist so etwas wie:C#: string [] bis Begrenzungszeichenfolge. Gibt es einen Einzeiler?

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

Es gibt jedoch keine solche Funktion ist. Ich habe über MSDN nachgedacht und nichts schien mir als eine Funktion, die die gleiche Aktion ausführen würde. Ich sah StringBuilder an und wieder fiel mir nichts auf. Kennt jemand eine nicht zu komplizierte Einlage, um ein Array zu einer begrenzten Zeichenfolge zu machen. Danke für die Hilfe Ihrer Leute.

UPDATE: Wow, lol, mein Schlechter. Ich schaute auf die .Join auf dem Array selbst und es nervte mich total. Ich habe nicht einmal auf String.Join geschaut. Danke Leute. Sobald es mir erlaubt zu akzeptieren, werde ich. Precate die Hilfe.

+0

So etwas wie ' String.Join (chDelimiter, array); 'Sie müssen Char möglicherweise zuerst in eine Zeichenfolge umwandeln. Es gibt auch eine generische Version. Ich vermute, dass LINQ das auch elegant machen kann. –

+0

Yeah, ich habe mir immer die falsche Verbindung angeschaut. Vielen Dank. – XstreamINsanity

Antwort

43

Für Arrays können Sie verwenden:

string.Join(", ", strArray); 

Persönlich benutze ich eine Erweiterungsmethode, die ich enumerable Sammlungen aller Art anwenden können:

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(); 
} 

... Was ich wie verwenden so:

strArray.Flatten(", "); 
+0

Schöne Funktion. Mein Hauptzweck ist es, eine Datei mit Trennzeichen zu erstellen, sie in ein Programm zur Bearbeitung mit SQL Lite als Speichermethode einzufügen und sie dann an eine Datei mit Trennzeichen zurückzusenden. Sobald es mich akzeptieren lässt, werde ich es tun. Vielen Dank. – XstreamINsanity

+8

In NET4.0 gibt es eine 'string.Join'-Überladung, die Sie mit jeder 'IEnumerable'-Sammlung verwenden können, http://msdn.microsoft.com/en-us/library/dd992421.aspx –

+0

@Danko: Nice! Wenn ich meine Anwendungen nach .NET 4 verschiebe, favorisiere ich definitiv die von Ihnen vorgeschlagene Methode. Vielen Dank! – kbrimington

4

Verwenden String.Join

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

Sie können die statische String.Join Methode verwenden:

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


EDIT: Als Antwort Kommentar: Basierend auf Ihren Kommentar, können Sie mehrere Arrays nehmen, verketten sie zusammen, und schließe dann das gesamte resultierende Array an. Dazu können Sie die IEnumerable-Erweiterungsmethode Concat verwenden. Hier ein Beispiel:

//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)); 

Hoffe, das hilft!

+0

Was mich stört ist, dass wenn etwas eine Zeichenkette [] ist, wenn ich .Join mache, sollte ich diese Option immer noch haben. Ich sollte die Möglichkeit haben, Arrays zu verbinden und die Option, dieses Array zu verbinden. :) – XstreamINsanity

+0

Ja, das habe ich gesehen. Ich meinte nicht unbedingt, dass ich es brauche, ich sage, dass wenn Sie einen String [] haben und Sie der Variablen mit .Join (strArray.Join() folgen, erhalten Sie nicht das Join (String-Trennzeichen, String [] strArray) -Option, erhalten Sie einige andere Join-Optionen.Ich denke, die Zeichenfolge [] sollte auch die .Join (string delimiter, string [] strArray) -Option, aber es wäre .Join (string delimiter), da es bereits ist ein Array, habe ich das klargestellt, weil ich mich verwirrt habe :) – XstreamINsanity

5

Werfen Sie einen Blick auf String.Join().

Ihre Probe muss wie folgt aussehen:

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

in diesem Fall String.Join() ist wahrscheinlich der einfachste Weg zu gehen, können Sie gleich LINQ verwenden obwohl

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

Aggregat ist jedoch viel langsamer, weil kein StringBuilder hinter den Kulissen (IIRC) verwendet wird. –