<.> R.Next ()) `Ein Sart -Weg, um eine Liste zu mischen? " />
var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next());
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. <原> Arbeitsprinzip
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.
<替> Alternative Methode
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:
<能> Leistungsoptimierung
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)
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]; } }
<说> 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!