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?


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

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 ().


18

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

String.Join<string>(String.Empty, los);

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.



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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.