Der Schlüssel zur Entwicklung von Lotterieanwendungen besteht darin, die zufällige Sortierung von Listenelementen sicherzustellen. In diesem Artikel wird der beste Weg erörtert, um die generische Liste
zufällige Sortierung in C#zu erreichen.
<list>
Fisher-yates Shuffle-Algorithmus
Fisher-yates Shuffle-Algorithmus ist eine Methode zur effizienten Störung generischer Listen. Der Algorithmus arbeitet über die Erweiterungsmethode Schnittstelle:
wie man verwendet: IList
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; } }
<机> Die Berücksichtigung des Zufallszahlengenerators
IList
<虽然> Obwohl die Klasse bequem ist, kann ihre Zufälligkeit unzureichend sein. Um die Zufälligkeit zu verbessern, wird empfohlen, den Zufallszahlengenerator in
List<Product> products = GetProducts(); products.Shuffle();
<程> Thread -Sicherheitsverbesserung
Um potenzielle Probleme in Umgebungen mit mehreren Threads zu vermeiden, kann es die Sicherheit der Thread verbessern: System.Random
System.Security.Cryptography
using System.Security.Cryptography; ... public static void Shuffle<T>(this IList<T> list) { RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider(); int n = list.Count; while (n > 1) { byte[] box = new byte[1]; do provider.GetBytes(box); while (!(box[0] < 251)); // Ensure a valid range int k = (int)(box[0] / 251.0 * (n + 1)); // Scale to the list size T value = list[k]; list[k] = list[n]; list[n] = value; } }
Mit diesen Methoden können Sie die Elemente in der generischen Liste der Generika effektiv sortieren, um eine wirklich zufällige Lotterie -Lotterie -Anwendung zu erstellen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine generische Liste in C# für Lottoanwendungen effektiv randomisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!