Heim >Backend-Entwicklung >C++ >Ist 'orderBy (x => r.Next ())` eine intelligente Möglichkeit, eine Liste zu mischen?
<.> R.Next ()) `Ein Sart -Weg, um eine Liste zu mischen? " /> <code class=" language-csharp>var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next()); <p> Diese Methode ist keine ideale Shuffle -Methode. Obwohl es für jedes Element die einzige Zufallszahl generiert, handelt es sich um eine O (n log n) Operation und es gibt einen effektiveren O (n) -Algorithmus. <strong> </strong> Arbeitsprinzip </p> <p> </p> im Wesentlichen wird diese Methode zufällig auf Elemente verteilt und sie basierend auf diesen Zahlen sortiert. Dies stellt sicher, dass jedes Element in verschiedenen Positionen erscheint, der Ort jedoch tatsächlich durch die generierte Zufallszahl bestimmt wird. <p> <strong> Alternative Methode </strong> </p> <p> Es wird empfohlen, den Fisher-Yates-Shuffle-Algorithmus der Durstenfeld-Version zu verwenden, die direkt Elemente austauschen. Kann mit solchen Erweiterungen wie folgt implementiert werden: </p> <p> <strong> Leistungsoptimierung </strong> </p> <p> Um die Leistung weiter zu optimieren, können die Elemente sofort beim Mischen zurückgegeben werden, wodurch unnötige Arbeiten reduziert werden: (Dieser Code ist genau der gleiche wie der vorherige Code, wiederholt) </p> <pre class="brush:php;toolbar:false"><code class="language-csharp">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]; } }</code>
Wichtige Beschreibung
muss die richtige zufällige Instanz verwenden, um zu vermeiden, dass die gleiche digitale Sequenz mehrmals generiert wird und die Thread -Sicherheit behält.Das obige ist der detaillierte Inhalt vonIst 'orderBy (x => r.Next ())` eine intelligente Möglichkeit, eine Liste zu mischen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!