Maison >développement back-end >C++ >Comment puis-je mélanger une liste au hasard en C #?
randomiser une liste C #
Cet article explore des méthodes efficaces pour mélanger les éléments d'une liste générique (liste
L'algorithme de shuffle Fisher-Yates
Le shuffle de Fisher-Yates est un algorithme éprouvé pour randomiser l'ordre de liste. Il est implémenté ici comme une méthode d'extension concise pour tout ilist
<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>
Ici, rng
représente une instance de la classe Random
.
Options de génération de nombres aléatoires
La classe standard System.Random
est suffisante pour de nombreuses applications. Cependant, pour les situations exigeant une sécurité cryptographique plus élevée et une aléatoire améliorée, envisagez d'utiliser l'espace de noms System.Security.Cryptography
:
<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>
Cette version utilise RNGCryptoServiceProvider
pour une aléatoire amélioré. Notez la vérification ajoutée pour garantir que le nombre aléatoire généré se situe dans la plage requise.
Exemple d'utilisation
Les deux méthodes sont utilisées de manière identique:
<code class="language-csharp">List<Product> products = GetProducts(); products.Shuffle(); </code>
Considérations de performance
tandis que System.Random
offre de la vitesse, System.Security.Cryptography
offre un aléatoire supérieur mais au prix des performances. Sélectionnez la méthode appropriée en fonction des besoins de votre application. Pour la plupart des mélanges généraux, System.Random
est parfaitement adéquat.
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!