289 votes

Accéder à un élément aléatoire de la liste

Je dispose d'une liste de tableaux et je dois pouvoir cliquer sur un bouton, puis choisir au hasard une chaîne de caractères dans cette liste et l'afficher dans une boîte de messages.

Comment dois-je m'y prendre ?

479voto

Mehrdad Afshari Points 204872
  1. Créer une instance de Random classe quelque part. Notez qu'il est très important de ne pas créer une nouvelle instance chaque fois que vous avez besoin d'un nombre aléatoire. Vous devez réutiliser l'ancienne instance pour obtenir une uniformité dans les nombres générés. Vous pouvez avoir une static quelque part (attention aux problèmes de sécurité des fils) :

    static Random rnd = new Random();
  2. Demandez au Random instance pour vous donner un nombre aléatoire avec le maximum du nombre d'éléments dans la ArrayList :

    int r = rnd.Next(list.Count);
  3. Affichez la chaîne de caractères :

    MessageBox.Show((string)list[r]);

161voto

Mark Seemann Points 102767

J'utilise généralement cette petite collection de méthodes d'extension :

public static class EnumerableExtension
{
    public static T PickRandom<T>(this IEnumerable<T> source)
    {
        return source.PickRandom(1).Single();
    }

    public static IEnumerable<T> PickRandom<T>(this IEnumerable<T> source, int count)
    {
        return source.Shuffle().Take(count);
    }

    public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source)
    {
        return source.OrderBy(x => Guid.NewGuid());
    }
}

Pour une liste fortement typée, cela vous permettrait d'écrire :

var strings = new List<string>();
var randomString = strings.PickRandom();

Si tout ce que vous avez est une ArrayList, vous pouvez la couler :

var strings = myArrayList.Cast<string>();

104voto

Fujiy Points 2155

Vous pouvez le faire :

list.OrderBy(x => Guid.NewGuid()).FirstOrDefault()

28voto

Joey Points 148544

Créer un Random instance :

Random rnd = new Random();

Récupère une chaîne de caractères aléatoire :

string s = arraylist[rnd.Next(arraylist.Length)];

N'oubliez pas, cependant, que si vous effectuez cette opération fréquemment, vous devez réutiliser l'option Random objet. Mettez-le comme un champ statique dans la classe pour qu'il ne soit initialisé qu'une seule fois et accédez-y ensuite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X