Daftar string ke satu string

206

Katakanlah Anda memiliki:

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

Dalam dunia fungsional yang gila ini kita hidup di zaman sekarang yang mana yang terbaik untuk membuat satu string dengan menggabungkan ini:

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

atau foreach StringBuilder tua polos

ATAU adakah cara yang lebih baik?

maxfridbe
sumber
9
Sepertinya .Net 4 juga akan menyertakan string. Bergabung (string, IEnumerable <string>), memungkinkan Anda melewati ToArray () msdn.microsoft.com/en-us/library/dd783876.aspx
luke

Jawaban:

289

Saya akan memilih opsi A:

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

Alasan saya adalah karena metode Bergabung ditulis untuk tujuan itu. Bahkan jika Anda melihat Reflector, Anda akan melihat bahwa kode yang tidak aman digunakan untuk benar-benar mengoptimalkannya. Dua lainnya juga BEKERJA, tapi saya pikir fungsi Gabung ditulis untuk tujuan ini, dan saya kira, yang paling efisien. Saya bisa saja salah ...

Sesuai @Nuri YILMAZ tanpa .ToArray(), tapi ini. NET 4+:

String.Join(String.Empty, los);
BFree
sumber
GA! Saya bahkan tidak melihat opsi ini saat pertama kali membacanya.
Joel Coehoorn
2
3 kali lebih cepat dari StringBuilder? Wow, saya pikir itu akan lebih cepat, tidak menyadari betapa jauh lebih cepat. Masuk akal, itu dilakukan dalam kode yang tidak aman menggunakan pointer, jadi ..... masuk akal.
BFree
8
bagus! hanya komentar: Gabung tidak perlu los.ToArray (), karena Daftar <T> dapat menampilkan IEnumarable <T>.
Nuri YILMAZ
8
@ Nuri: Pertanyaan ini ditanyakan pada 08, sebelum. Net 4 keluar. Kelebihan yang mengambil IEnumerable <T> ditambahkan dalam. Net 4.
BFree
2
String.Gabung bersama dengan String.Compat adalah emas. Mis: 'String.Concat ("{", String.Join (",", m_Data), "}");'
KornMuffin
51
string.Concat(los.ToArray());

Jika Anda hanya ingin menggabungkan string maka gunakan string.Concat () alih-alih string.Join ().

Pent Ploompuu
sumber
18

Jika Anda menggunakan .net 4.0 Anda dapat menggunakan cara penyortir:

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

String.Join () diimplementasikan cukup cepat, dan karena Anda sudah memiliki koleksi string yang dimaksud, mungkin merupakan pilihan terbaik. Di atas semua itu, teriakan "Saya bergabung dengan daftar string!" Selalu baik.

J Cooper
sumber
7
los.Aggregate((current, next) => current + "," + next);
pemilik rumah
sumber
5

Pilihan saya adalah string. Bergabunglah

Tidak perlu evaluasi lambda dan fungsi sementara yang akan dibuat, lebih sedikit panggilan fungsi, lebih sedikit tumpukan yang mendorong dan muncul.

Tom Ritter
sumber