Heim >Backend-Entwicklung >C++ >Ist 'orderBy (x => r.Next ())` eine intelligente Möglichkeit, eine Liste zu mischen?

Ist 'orderBy (x => r.Next ())` eine intelligente Möglichkeit, eine Liste zu mischen?

DDD
DDDOriginal
2025-01-31 19:01:08566Durchsuche

<.> R.Next ()) `Ein Sart -Weg, um eine Liste zu mischen? " /> Is `OrderBy(x =>
</p> <<> Ist die <p> Shuffle -Liste weise? <strong> <<>
<code>OrderBy(x => r.Next())</code> Wenn Sie den Shuffle -Algorithmus diskutieren, empfehlen einige Personen den folgenden Code: </strong>
</p>
<p> <估> Bewertung </p> <pre class=<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn