Saya ingin mengubah array atau daftar int menjadi string yang dipisahkan koma, seperti ini:
string myFunction(List<int> a) {
return string.Join(",", a);
}
Tapi string.Join hanya dibutuhkan List<string>
sebagai parameter kedua. Apa cara terbaik untuk melakukannya?
Jawaban:
Cara terbaik adalah dengan meningkatkan ke .NET 4.0 di mana ada kelebihan beban yang melakukan apa yang Anda inginkan:
String.Join<T>(String, IEnumerable<T>)
Jika Anda tidak dapat meningkatkan, Anda dapat memperoleh efek yang sama menggunakan Select dan ToArray.
return string.Join(",", a.Select(x => x.ToString()).ToArray());
sumber
ToArray
metode bawaanList<T>
?int
.Sebuah scalable dan aman pelaksanaan string enumerable generik bergabung untuk NET 3.5. Penggunaan iterator adalah agar nilai string gabungan tidak tertahan di akhir string. Ini bekerja dengan benar dengan 0, 1 dan lebih banyak elemen:
public static class StringExtensions { public static string Join<T>(this string joinWith, IEnumerable<T> list) { if (list == null) throw new ArgumentNullException("list"); if (joinWith == null) throw new ArgumentNullException("joinWith"); var stringBuilder = new StringBuilder(); var enumerator = list.GetEnumerator(); if (!enumerator.MoveNext()) return string.Empty; while (true) { stringBuilder.Append(enumerator.Current); if (!enumerator.MoveNext()) break; stringBuilder.Append(joinWith); } return stringBuilder.ToString(); } }
Pemakaian:
var arrayOfInts = new[] { 1, 2, 3, 4 }; Console.WriteLine(",".Join(arrayOfInts)); var listOfInts = new List<int> { 1, 2, 3, 4 }; Console.WriteLine(",".Join(listOfInts));
Nikmati!
sumber
String.Join(String, String[])
bisa dipanggil. Satu-satunya hal yang akan saya katakan adalah tidak biasa melihat metode ini ditulis sebagai ekstensiString
sebagai lawanIEnumerable<String>
- saya cenderung selalu menyebutnya di akhir rantai panjang panggilan metode ekstensi..NET 2.0:
static string IntListToDelimitedString(List<int> intList, char Delimiter) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < intList.Count; i++) { builder.Append(intList[i].ToString()); if (i != intList.Count - 1) builder.Append(Delimiter); } return builder.ToString(); }
sumber
Memiliki Metode Ekstensi serupa yang saya modifikasi dengan ini
public static class MyExtensions { public static string Join(this List<int> a, string splitChar) { return string.Join(splitChar, a.Select(n => n.ToString()).ToArray()); } }
dan Anda menggunakannya seperti ini
var test = new List<int>() { 1, 2, 3, 4, 5 }; string s = test.Join(",");
.NET 3.5
sumber
IEnumerable<T>
sudah memiliki sebuahJoin
metode, dan metode baru ini melakukan operasi yang sama sekali berbeda, sehingga penggunaannya berlawanan dengan intuisi. Kedua, jika Anda sedang akan menciptakan metode ini, pergi ke depan dan membuatnya umum yang berlaku.Jawaban ini untuk Anda jika Anda belum ingin menjelajahi lebih dalam .NET 4.0.
String.Join () menggabungkan semua elemen dari array string, menggunakan pemisah yang ditentukan antara setiap elemen.
Sintaksnya adalah
public static string Join( string separator, params string[] value )
Daripada meneruskan Daftar int Anda ke metode Gabung, saya sarankan untuk membangun sebuah array string terlebih dahulu.
Inilah yang saya usulkan:
static string myFunction(List<int> a) { int[] intArray = a.ToArray(); string[] stringArray = new string[intArray.Length]; for (int i = 0; i < intArray.Length; i++) { stringArray[i] = intArray[i].ToString(); } return string.Join(",", stringArray); }
sumber
intArray
itu tidak perlu.List<int>
dapat diindeks dan memilikiCount
properti, membuat konversi ke array menjadi berlebihan. Anda juga mungkin ingin menjadikan karakter bergabung sebagai parameter daripada melakukan hardcode ke dalam metode.Menggunakan .NET 4.0
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string s = myFunction(PopulateTestList()); this.TextBox1.Text = s; } protected List<int> PopulateTestList() { List<int> thisList = new List<int>(); thisList.Add(22); thisList.Add(33); thisList.Add(44); return thisList; } protected string myFunction(List<int> a) { return string.Join(",", a); } }
sumber
Dalam. NET kelas daftar memiliki
.ToArray()
metode. Sesuatu seperti ini bisa berhasil:string myFunction(List<int> a) { return string.Join(",", a.ToArray()); }
Ref: Daftar <T> Metode (MSDN)
sumber
answer from 2010
sudah menyatakan bahwa, sepertiToString
yang tersirat saat melakukan astring.Join
.