<.> r.next ()) `Cara SART untuk mengocok senarai?
" />
var r = new Random(); var shuffled = ordered.OrderBy(x => r.Next());
Kaedah ini bukan kaedah shuffle yang ideal. Walaupun ia menghasilkan satu -satunya nombor rawak untuk setiap elemen, ia adalah operasi O (n log n), dan terdapat algoritma O (n) yang lebih berkesan. <原> Prinsip kerja
Pada dasarnya, kaedah ini diedarkan kepada unsur -unsur secara rawak dan menyusunnya berdasarkan nombor ini. Ini memastikan bahawa setiap elemen muncul dalam kedudukan yang berbeza, tetapi lokasi sebenarnya ditentukan oleh nombor rawak yang dihasilkan.
<替> kaedah alternatif
Adalah disyorkan untuk menggunakan algoritma shuffle Fisher-Yates versi Durstenfeld, yang secara langsung bertukar elemen. Boleh dilaksanakan menggunakan sambungan seperti ini:
<能> Pengoptimuman Prestasi
Untuk terus mengoptimumkan prestasi, unsur -unsur boleh dikembalikan dengan segera apabila mengalir, dengan itu mengurangkan kerja yang tidak perlu: (Kod ini sama seperti kod sebelumnya, diulang)
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]; } }
<说> Penerangan penting
mesti menggunakan contoh rawak yang betul untuk mengelakkan menjana urutan digital yang sama beberapa kali dan menyimpan keselamatan benang.">
Atas ialah kandungan terperinci Adakah `OrderBy (x => r.next ())` Cara pintar untuk mengosongkan senarai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!