Tu peux utiliser la méthode d'extension fournie ici :
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 :
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.
Partager