IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Mélanger une liste de nombre c#


Sujet :

C#

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 29
    Points : 23
    Points
    23
    Par défaut Mélanger une liste de nombre c#
    Bonjour,

    J'ai besoin, pour la réalisation d'un TP (jeu de cartes), de créer une pioche.
    Ma liste n'est pas aléatoire puisque il y a dedans, précisément 7 cartes de chacun des nombres allant de 39 à 50.

    Le souci est que je voudrai mélanger cette pioche avant chaque partie, comment puis-je faire cela en c# ?

    Merci par avance pour votre aide !

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Tu peux utiliser la méthode d'extension fournie ici :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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] < n * (Byte.MaxValue / n)));
            int k = (box[0] % n);
            n--;
            T value = list[k];
            list[k] = list[n];
            list[n] = value;
        }
    }
    Il faut rajouter le using suivant :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Security.Cryptography;
    Tu remarqueras qu'il est fait usage de la classe RNGCryptoServiceProvider (et non de la classe Random), car elle fournit des résultats beaucoup plus aléatoires. Une comparaison le démontrant est disponible ici.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Tu remarqueras qu'il est fait usage de la classe RNGCryptoServiceProvider (et non de la classe Random), car elle fournit des résultats beaucoup plus aléatoires. Une comparaison le démontrant est disponible ici.
    Effectivement RNGCryptoServiceProvider est moins prévisible que Random, mais le benchmark qu'il a fait pour le démontrer est complètement foireux

    Il appelle Shuffle plusieurs fois de suite, ce qui crée à chaque fois une nouvelle instance de Random à intervalles très rapprochés (moins d'1ms), et comme Random utilise comme seed le nombre (entier) de millisecondes depuis le démarrage, ça utilise la même seed à chaque fois. Donc dans son exemple, Random ne parait pas très aléatoire, mais c'est surtout parce qu'il l'utilise mal...

Discussions similaires

  1. Créer une liste de nombre
    Par lpnj1 dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/12/2007, 10h39
  2. Réponses: 8
    Dernier message: 11/04/2006, 21h41
  3. Mélanger une liste aléatoirement
    Par Ickou dans le forum Langage
    Réponses: 19
    Dernier message: 23/12/2005, 13h56
  4. [c#] Trier une liste de nombres liés.
    Par Joad dans le forum ASP.NET
    Réponses: 13
    Dernier message: 11/05/2005, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo