C # Daftar <string> ke string dengan pembatas

631

Apakah ada fungsi dalam C # untuk dengan cepat mengkonversi beberapa koleksi ke string dan memisahkan nilai dengan pembatas?

Sebagai contoh:

List<string> names -> string names_together = "John, Anna, Monica"

nan
sumber

Jawaban:

1201

Anda bisa menggunakannya String.Join. Jika sudah punya List<string>maka Anda bisa menelepon ToArraydulu:

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());

Di .NET 4 Anda tidak perlu ToArraylagi, karena ada kelebihan String.Joinyang membutuhkan IEnumerable<string>.

Hasil:


John, Anna, Monica

Quartermeister
sumber
95

Anda juga dapat melakukan ini dengan LINQ jika mau

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);

Meskipun saya lebih suka sintaks non-linq dalam jawaban Quartermeister dan saya pikir Aggregatemungkin melakukan lebih lambat (mungkin lebih banyak operasi penggabungan string).

Bob
sumber
19
Terima kasih atas balasan cepatnya, keduanya berfungsi dengan baik. Anda benar saya melakukan pengukuran kinerja kecil menggunakan kelas Stopwatch dan cara linq jauh lebih lambat: String.Join (",", names.ToArray ()); -> mengambil 18 ticks Aggregate ((a, b) => a + "," + b) -> mengambil 736 ticks
nan
2
Ya saya pikir Aggregatelebih baik untuk operasi tipe Matematika. Dengan string operasi ini mirip dengan for eaching dan hanya menambahkan string yang sangat lambat tidak efisien karena Anda membuat string baru untuk setiap item yang ada dalam daftar.
Bob
Perhatikan bahwa Agregat tanpa nilai seed akan melempar InvalidOperationException jika wadah kosong. Gunakan Aggregate versi seeded (seed, func) untuk menghindari kode penanganan kesalahan atau pemeriksaan bersyarat. String.Join tidak membuang kosong sehingga tidak ada seed atau kode tambahan diperlukan ... ditambah tidak memerlukan Linq dan sintaks sedikit lebih jelas.
Huacanacha
1
Agregat dalam contoh di atas dapat bekerja lebih cepat jika Anda akan menggunakan StringBuilder. Tidak disarankan menggunakan '+' untuk melakukan penggabungan banyak. Lihat bagian Keterangan di sini ( msdn.microsoft.com/en-us/library/… )
Ilya Denisov