Heim > Backend-Entwicklung > C++ > Wie kann ich zufällig eine Liste in C#mischen?

Wie kann ich zufällig eine Liste in C#mischen?

DDD
Freigeben: 2025-02-03 08:24:16
Original
734 Leute haben es durchsucht

How Can I Randomly Shuffle a List in C#?

Eine C# -Liste randomisieren

In diesem Artikel werden effiziente Methoden zum Verschmieren der Elemente einer generischen Liste (Liste ) in C#untersucht. Der Fokus liegt auf dem weit verbreiteten Fisher-Yates-Shuffle-Algorithmus.

Der Fisher-yates Shuffle-Algorithmus

Der Fisher-Yates-Shuffle ist ein bewährter Algorithmus zur Randomisierungslistenreihenfolge. Es wird hier als prägnante Erweiterungsmethode für jeden ilist :

implementiert
<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>
Nach dem Login kopieren

hier ist rng eine Instanz der Random Klasse.

Optionen für Zufallszahlengenerierungsoptionen

Die Standard System.Random -Klasse reicht für viele Anwendungen aus. In Situationen, in denen eine höhere kryptografische Sicherheit und eine verbesserte Zufälligkeit erforderlich ist, sollten Sie den System.Security.Cryptography Namespace verwenden:

<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>
Nach dem Login kopieren

Diese Version verwendet RNGCryptoServiceProvider für eine verbesserte Zufälligkeit. Beachten Sie die hinzugefügte Prüfung, um sicherzustellen, dass die generierte Zufallszahl innerhalb des erforderlichen Bereichs liegt.

Verwendungsbeispiel

Beide Methoden werden identisch verwendet:

<code class="language-csharp">List<Product> products = GetProducts();
products.Shuffle(); </code>
Nach dem Login kopieren

Leistungsüberlegungen

Während System.Random Geschwindigkeit bietet, bietet System.Security.Cryptography auf Kosten der Leistung überlegene Zufälligkeit. Wählen Sie die entsprechende Methode basierend auf den Anforderungen Ihrer Anwendung aus. Für die meisten allgemeinen Mischung ist System.Random perfekt ausreichend.

Das obige ist der detaillierte Inhalt vonWie kann ich zufällig eine Liste in C#mischen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage