Tri efficace et aléatoire C # Liste
En C #, le tri aléatoire des listes génériques est une tâche courante dans le développement de logiciels. Par exemple, dans les applications de loterie, vous devrez peut-être être trié au hasard sur des ensembles numériques limités.
Best Practice:
En C #, la méthode la plus efficace pour les listes de réglages aléatoires est d'utiliser la méthode d'expansion basée sur l'algorithme de mélange Fisher-Yates. La méthode fournie ci-dessous assure des éléments de liste de remaniement efficaces et vraiment aléatoires:
comment utiliser:
<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>
Cette méthode d'extension est simple. Considérez l'exemple suivant: Le choix du générateur de nombres aléatoires:
Bien que le code ci-dessus utilise la méthode
<code class="language-csharp">List<Product> products = GetProducts(); products.Shuffle();</code>
, comme indiqué ci-dessous:
Sécurité du thread: System.Random
System.Security.Cryptography
Afin d'assurer la randomisation des threads en toute sécurité, les méthodes d'expansion modifiées suivantes doivent être prises en compte:
<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>
parmi eux défini comme:
Grâce à ces méthodes, vous pouvez choisir la méthode de tri aléatoire la plus appropriée en fonction de vos besoins. Veuillez noter que l'importance de lors de l'utilisation depour assurer la version correcte des ressources.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!