Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh mengosongkan senarai secara rawak di C#?

Bagaimanakah saya boleh mengosongkan senarai secara rawak di C#?

DDD
Lepaskan: 2025-02-03 08:24:16
asal
767 orang telah melayarinya

How Can I Randomly Shuffle a List in C#?

rawak senarai c#

Artikel ini meneroka kaedah yang efisien untuk mengosongkan unsur -unsur senarai generik (senarai

) 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

:

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;
    }
}
Salin selepas log masuk
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

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;
        }
    }
}
Salin selepas log masuk
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:

List<Product> products = GetProducts();
products.Shuffle(); 
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan