<.> R.Next ()) `Une façon SART de mélanger une liste?
"/>
var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next());
Cette méthode n'est pas une méthode de mélange idéale. Bien qu'il génère le seul nombre aléatoire pour chaque élément, il s'agit d'une opération O (n log n), et il existe un algorithme O (n) plus efficace. <原> Principe de travail
Essentiellement, cette méthode est distribuée aux éléments au hasard et les a triés en fonction de ces nombres. Cela garantit que chaque élément apparaît dans différentes positions, mais l'emplacement est en fait déterminé par le nombre aléatoire généré.
<替> Méthode alternative
Il est recommandé d'utiliser l'algorithme Shuffle Fisher-Yates de la version Durstenfeld, qui échange directement des éléments. Peut être implémenté en utilisant de telles extensions comme celle-ci:
<能> Optimisation des performances
Afin d'optimiser davantage les performances, les éléments peuvent être renvoyés immédiatement lors du mélange, réduisant ainsi les travaux inutiles: (ce code est exactement le même que le code précédent, répété)
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source, Random rng) { T[] elements = source.ToArray(); for (int i = elements.Length - 1; i >= 0; i--) { int swapIndex = rng.Next(i + 1); yield return elements[swapIndex]; elements[swapIndex] = elements[i]; } }
<说> Description importante
Doit utiliser la bonne instance aléatoire pour éviter de générer plusieurs fois la même séquence numérique et maintenir la sécurité des threads.">
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!