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

Wie kann ich eine Liste in C#effizient mischen?

DDD
Freigeben: 2025-02-03 08:28:09
Original
683 Leute haben es durchsucht

How Can I Efficiently Shuffle a List in C#?

Effiziente und zufällige Sortierung C #liste

In C#ist die zufällige Sortierung generischer Listen eine häufige Aufgabe in der Softwareentwicklung. In Lotterieanwendungen müssen Sie beispielsweise möglicherweise zufällig nach begrenzten digitalen Sätzen sortiert werden.

Best Practice:

In C#besteht die effektivste Methode für zufällige Einstellungslisten darin, die Erweiterungsmethode basierend auf dem Fisher-Yates-Mischungsalgorithmus zu verwenden. Die nachstehende Methode gewährleistet effiziente und wirklich zufällig zufällige Umbaulistenelemente:

wie man verwendet:

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

Diese Erweiterungsmethode ist einfach. Betrachten Sie das folgende Beispiel: <> <机> Die Wahl des Zufallszahlengenerators:

Obwohl der obige Code die
List<Product> products = GetProducts();
products.Shuffle();
Nach dem Login kopieren
-Methode verwendet, muss er seine potenziellen Einschränkungen in der Zufälligkeit zugeben. Wenn Ihre Anwendung eine höhere Zufälligkeit von Qualität erfordert, können Sie den in

bereitgestellten Zufallszahlengenerator verwenden, wie unten gezeigt:

<程> Thread -Sicherheit:

System.Random System.Security.Cryptography Um die Randomisierung von Threads sicher sicherzustellen, müssen die folgenden modifizierten Expansionsmethoden berücksichtigt werden:

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

unter ihnen definiert als:

Mit diesen Methoden können Sie die am besten geeignete Zufallssortiermethode entsprechend Ihren Anforderungen auswählen. Bitte beachten Sie, dass die Bedeutung von bei der Verwendung

für die korrekte Freigabe von Ressourcen sichergestellt wird.

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

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