Lista ciągów do jednego ciągu

206

Powiedzmy, że masz:

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

W tym szalonym funkcjonalnym świecie żyjemy w dzisiejszych czasach, który z nich byłby najlepszy do stworzenia jednego ciągu poprzez połączenie tych:

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);

lub Zwykły stary ForeBuilder Foreach

Czy jest jakiś lepszy sposób?

maxfridbe
źródło
9
Wygląda na to, że .Net 4 będzie również zawierał string.Join (string, IEnumerable <string>), pozwalając pominąć ToArray () msdn.microsoft.com/en-us/library/dd783876.aspx
luke

Odpowiedzi:

289

Wybrałbym opcję A:

String.Join(String.Empty, los.ToArray());

Moje rozumowanie jest takie, że metoda Join została napisana w tym celu. W rzeczywistości, jeśli spojrzysz na Reflector, zobaczysz, że niebezpieczny kod został użyty do jego naprawdę zoptymalizowania. Pozostałe dwa również PRACUJĄ, ale myślę, że funkcja Join została napisana w tym celu i, jak sądzę, najbardziej wydajna. Mogę się mylić ...

Zgodnie z @Nuri YILMAZ bez .ToArray(), ale jest to .NET 4+:

String.Join(String.Empty, los);
BFree
źródło
GA! Na początku nawet nie widziałem tej opcji - przeczytałem tuż obok niej.
Joel Coehoorn
2
3 razy szybszy niż StringBuilder? Wow, pomyślałem, że będzie szybciej, nie zdawałem sobie sprawy, o ile szybciej. Ma to jednak sens, odbywa się w niebezpiecznym kodzie przy użyciu wskaźników, więc ... ma sens.
BFree
8
miły! tylko uwaga: Join nie potrzebuje los.ToArray (), ponieważ List <T> może rzutować IEnumarable <T>.
Nuri YILMAZ,
8
@Nuri: To pytanie zostało zadane w 08, przed udostępnieniem .Net 4. Przeciążenie, które wymaga IEnumerable <T>, zostało dodane w .Net 4.
BFree
2
String.Join w połączeniu z String.Concat jest złoty. Przykład: „String.Concat („ {”, String.Join („, ”, m_Data),„} ”); '
KornMuffin
51
string.Concat(los.ToArray());

Jeśli chcesz po prostu połączyć łańcuchy, użyj string.Concat () zamiast string.Join ().

Pent Ploompuu
źródło
18

Jeśli używasz .net 4.0, możesz użyć sortera:

String.Join<string>(String.Empty, los);
mnieto
źródło
10

String.Join () jest implementowany dość szybko, a ponieważ masz już kolekcję omawianych ciągów, jest to prawdopodobnie najlepszy wybór. Przede wszystkim krzyczy: „Dołączam do listy ciągów!” Zawsze miło.

J Cooper
źródło
7
los.Aggregate((current, next) => current + "," + next);
gospodyni
źródło
5

Mój głos jest ciągły. Dołącz

Nie ma potrzeby tworzenia ocen lambda i funkcji tymczasowych, mniej wywołań funkcji, mniej pchania i poppingu stosu.

Tom Ritter
źródło