Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya dapat mengikat senarai dengan cekap dalam C#?
Senarai C#🎜 🎜>
Dalam C#, penyortiran rawak senarai generik adalah tugas yang sama dalam pembangunan perisian. Sebagai contoh, dalam aplikasi loteri, anda mungkin perlu disusun secara rawak pada set digital terhad.
Amalan terbaik:
Dalam C#, kaedah yang paling berkesan untuk senarai tetapan rawak adalah dengan menggunakan kaedah pengembangan berdasarkan algoritma shuffling Fisher-Yates. Kaedah yang disediakan di bawah ini memastikan elemen senarai perombakan yang cekap dan benar -benar rawak:
cara menggunakan:
<code class="language-csharp">private static Random rng = new Random(); public static void Shuffle<T>(this IList<T> list) { int n = list.Count; while (n > 1) { n--; int k = rng.Next(n + 1); T value = list[k]; list[k] = list[n]; list[n] = value; } }</code>
Kaedah lanjutan ini mudah. Pertimbangkan contoh berikut: Pilihan penjana nombor rawak:
Walaupun kod di atas menggunakan kaedah
<code class="language-csharp">List<Product> products = GetProducts(); products.Shuffle();</code>, ia mesti mengakui batasan potensinya secara rawak. Jika aplikasi anda memerlukan rawak kualiti yang lebih tinggi, anda boleh menggunakan penjana nombor rawak yang disediakan dalam
, seperti yang ditunjukkan di bawah:
Thread Security: System.Random
System.Security.Cryptography
Untuk memastikan rawak benang dengan selamat, kaedah pengembangan yang diubah suai berikut mesti dipertimbangkan:
<code class="language-csharp">using System.Security.Cryptography; ... public static void Shuffle<T>(this IList<T> list) { using (RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider()) { int n = list.Count; while (n > 1) { byte[] box = new byte[1]; do provider.GetBytes(box); while (!(box[0] < (byte)((double)byte.MaxValue * (double)n / (double)uint.MaxValue))); int k = (int)(box[0] / ((double)byte.MaxValue / n)); T value = list[k]; list[k] = list[n - 1]; list[n - 1] = value; } } }</code>
di antara mereka ditakrifkan sebagai:
Melalui kaedah ini, anda boleh memilih kaedah penyortiran rawak yang paling sesuai mengikut keperluan anda. Sila ambil perhatian bahawa kepentingan apabila menggunakanuntuk memastikan pembebasan sumber yang betul.
Atas ialah kandungan terperinci Bagaimanakah saya dapat mengikat senarai dengan cekap dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!