Maison > développement back-end > C++ > Comment puis-je mélanger une liste au hasard en C #?

Comment puis-je mélanger une liste au hasard en C #?

DDD
Libérer: 2025-02-03 08:24:16
original
734 Les gens l'ont consulté

How Can I Randomly Shuffle a List in 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 ) en C #. L'accent est mis sur l'algorithme de shuffle Fisher-Yates largement utilisé.

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal