Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mengosongkan senarai secara rawak di C#?
rawak senarai c#
) dalam C#. Tumpuannya adalah pada algoritma shuffle Fisher-Yates yang digunakan secara meluas.
algoritma shuffle fisher-yates
Shuffle Fisher-Yates adalah algoritma yang terbukti untuk urutan senarai rawak. Ia dilaksanakan di sini sebagai kaedah lanjutan ringkas untuk mana -mana ilist:
<code class="language-csharp">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>di sini,
mewakili contoh kelas rng
. Random
pilihan penjanaan nombor rawak
Kelas standard cukup untuk banyak aplikasi. Walau bagaimanapun, untuk situasi yang menuntut keselamatan kriptografi yang lebih tinggi dan rawak yang lebih baik, pertimbangkan untuk menggunakan ruang nama System.Random
: System.Security.Cryptography
<code class="language-csharp">public static void Shuffle<T>(this IList<T> list) { using (var provider = new RNGCryptoServiceProvider()) { int n = list.Count; while (n > 1) { byte[] box = new byte[1]; do provider.GetBytes(box); while (!(box[0] < (byte)((n + 1) * (double.MaxValue / 256)))); //Ensure value within range int k = box[0] % (n + 1); T value = list[k]; list[k] = list[n]; list[n] = value; } } }</code>Versi ini menggunakan
untuk rawak yang dipertingkatkan. Perhatikan cek tambahan untuk memastikan nombor rawak yang dihasilkan berada dalam julat yang diperlukan. RNGCryptoServiceProvider
Contoh penggunaan
kedua -dua kaedah digunakan secara identik:
<code class="language-csharp">List<Product> products = GetProducts(); products.Shuffle(); </code>
Pertimbangan Prestasi
manakala menawarkan kelajuan, System.Random
menyediakan rawak unggul tetapi pada kos prestasi. Pilih kaedah yang sesuai berdasarkan keperluan aplikasi anda. Untuk kebanyakan shuffling tujuan umum, System.Security.Cryptography
sangat mencukupi. System.Random
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengosongkan senarai secara rawak di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!