web-dev-qa-db-fra.com

mélanger (réorganiser au hasard) une liste <chaîne>

J'ai besoin de réorganiser mon tableau List, il contient un nombre d'éléments non déterminable.

Quelqu'un peut-il me donner un exemple de la façon dont je fais cela, merci

21
brux
List<Foo> source = ...
var rnd = new Random();
var result = source.OrderBy(item => rnd.Next());

Évidemment, si vous voulez un véritable caractère aléatoire au lieu d'un générateur de nombres pseudo-aléatoires, vous pouvez utiliser RNGCryptoServiceProvider au lieu de Random .

59
Darin Dimitrov

Il s'agit d'une méthode d'extension qui mélangera un List<T>:

    public static void Shuffle<T>(this IList<T> list) {
        int n = list.Count;
        Random rnd = new Random();
        while (n > 1) {
            int k = (rnd.Next(0, n) % n);
            n--;
            T value = list[k];
            list[k] = list[n];
            list[n] = value;
        }
    }
20
kprobst