Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya dapat mengikat senarai dengan cekap dalam C#?

Bagaimanakah saya dapat mengikat senarai dengan cekap dalam C#?

DDD
Lepaskan: 2025-02-03 08:28:09
asal
652 orang telah melayarinya

How Can I Efficiently Shuffle a List in 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>
Salin selepas log masuk

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

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 menggunakan

untuk 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!

sumber:php.cn
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