Dans this question une des suggestions est de trier une liste par Random.Next().Tri par Random.Next()
Je suppose (peut-être à tort) qu'il propose ce
public static IEnumerable<T> RandomSort<T>(this IEnumerable<T> items)
{
Random r = new Random();
var a = items.ToArray();
Array.Sort(a, (t1, t2) => (r.Next()%2==0)?-1 : 1);
return a;
}
(Oui, il y a déjà une fonction Array.RandomShuffle qui vous évidemment utiliser à la place qui n'est pas la question.)
EDIT: L'affiche a clarifié la réponse. Il suggérait l'utilisation de la clause OrderBy
La question est, est le code ci-dessus (Using Array.Sort()) sûr d'exécuter?
Mon problème est qu'il enfreindrait une loi fondamentale de prédicats de tri:
si (a < b) et (b < c) puis (a < c)
Il est même pas garantir que si (un < b) puis (un < b) la prochaine fois que vous demandez.
Cela vous mènerait-il dans un territoire de "comportement non défini"? Par exemple, il pourrait tomber en panne ou tomber dans une boucle infinie en fonction de la séquence de nombres que retourne Random()?
Voir cette entrée de blog: http://blogs.msdn.com/b/ericlippert/archive/2011/01/31/spot-the-defect-bad-comparisons-part-four.aspx –