Konvertieren Sie "List <string>" in eine durch Kommas getrennte Zeichenfolge

75

Gibt es eine schnelle Möglichkeit, in C # List<string>in ein durch Kommas getrenntes zu konvertieren string?

Ich mache es so, aber vielleicht gibt es einen schnelleren oder effizienteren Weg?

List<string> ls = new List<string>();
ls.Add("one");
ls.Add("two");
string type = string.Join(",", ls.ToArray());

PS: Auf dieser Site gesucht, aber die meisten Lösungen sind für Java oder Python

Ozkan
quelle
2
Nein, du machst es richtig. Obwohl ich nicht denke, dass Sie tun müssen ToArray().
Yuck
2
Schneller zu schreiben oder schneller auszuführen?
Ilia G
Beide :), aber anscheinend ist es nicht möglich
Ozkan
@ Yuck Es wird benötigt, um zu konvertieren string[](weil ich nicht benutze .NET 4)
Ozkan
@Ozkan Sie sollten Ihre Frage wahrscheinlich für die Framework-Version markieren, gegen die Sie dann arbeiten. Ich denke, Sie werden feststellen, dass die meisten Antworten davon ausgehen, dass Sie die neueste Version verwenden.
Yuck

Antworten:

116

In .NET 4 brauchen Sie den ToArray()Anruf nicht - string.Joinist überlastet, um ihn anzunehmen IEnumerable<T>oder nur IEnumerable<string>.

Es gibt möglicherweise effizientere Möglichkeiten, dies vor .NET 4 zu tun, aber benötigen Sie diese wirklich? Ist das tatsächlich ein Engpass in Ihrem Code?

Sie können die Liste durchlaufen, die endgültige Größe ermitteln, eine StringBuildergenau die richtige Größe zuweisen und dann den Join selbst durchführen. Das würde verhindern, dass das zusätzliche Array aus wenig Grund erstellt wird - aber es würde nicht viel Zeit sparen und es wäre viel mehr Code.

Jon Skeet
quelle
19
string.Join (",", myList)
Mahesh
15

Das Folgende führt zu einer durch Kommas getrennten Liste. Stellen Sie sicher, dass Sie eine using-Anweisung für einfügenSystem.Linq

List<string> ls = new List<string>();
ls.Add("one");
ls.Add("two");
string type = ls.Aggregate((x,y) => x + "," + y);

ergibt eins, zwei

Wenn Sie nach dem Komma ein Leerzeichen benötigen, ändern Sie einfach die letzte Zeile in string type = ls.Aggregate((x,y) => x + ", " + y);

Anthony Shaw
quelle
@ Ozkan Bitte testen Sie es und lassen Sie es uns wissen.
Dan J
Eigentlich hatte ich nicht nachgesehen. Mit nur den beiden Elementen in der Liste, nein, sie sind gleich schnell, aber wenn sie auf 100.000 Elemente explodieren, ist das Aggregat tatsächlich viel langsamer als string.Join. Gut zu wissen, denke ich. Ich habe Aggregate in der Vergangenheit bevorzugt, aber ich denke, ich werde zu String wechseln. In Zukunft beitreten
Anthony Shaw
11

Um Jon Skeets zu erweitern, antworten Sie auf den folgenden Code .Net 4:

string myCommaSeperatedString = string.Join(",",ls);
user1
quelle
3

Folge dies:

       List<string> name = new List<string>();   

        name.Add("Latif");

        name.Add("Ram");

        name.Add("Adam");
        string nameOfString = (string.Join(",", name.Select(x => x.ToString()).ToArray()));
Salim Latif Waigaonkar
quelle
2
static void Main(string[] args)
{
   List<string> listStrings = new List<string>(){ "C#", "Asp.Net", "SQL Server", "PHP", "Angular"};
   string CommaSeparateString = GenerateCommaSeparateStringFromList(listStrings);
   Console.Write(CommaSeparateString);
   Console.ReadKey();
}

private static string GenerateCommaSeparateStringFromList(List<string> listStrings)
{
   return String.Join(",", listStrings);  
}

Konvertieren Sie eine Liste von Zeichenfolgen in durch Kommas getrennte Zeichenfolge C #.

Hitesh Kumar
quelle
Während dieser Code die Frage möglicherweise beantwortet, würde die Bereitstellung eines zusätzlichen Kontexts darüber, wie und / oder warum das Problem gelöst wird, den langfristigen Wert der Antwort verbessern. Bitte lesen Sie diese Anleitung, um eine qualitativ hochwertige Antwort zu erhalten.
thewaywewere
0

Auf diese Weise würde ich lieber sehen, ob ich Ihren Code beibehalten habe. Wenn Sie es schaffen, eine schnellere Lösung zu finden, wird dies sehr esoterisch sein, und Sie sollten sie wirklich in einer Methode vergraben, die beschreibt, was sie tut.

(Funktioniert es immer noch ohne ToArray)?

Bryan Boettcher
quelle
1
Ich kann string.Joinnur auf Array's von strings. Also ist es notwendig (weil ich nicht benutze.NET 4
Ozkan