Heim >Backend-Entwicklung >C++ >Wie kann ich eine Liste in C#effizient mischen?
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:
<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>
Diese Erweiterungsmethode ist einfach. Betrachten Sie das folgende Beispiel: Die Wahl des Zufallszahlengenerators:
Obwohl der obige Code die
<code class="language-csharp">List<Product> products = GetProducts(); products.Shuffle();</code>-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:
<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>
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 Verwendungfü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!