Rumah >pembangunan bahagian belakang >C++ >Adakah `OrderBy (x => r.next ())` Cara yang berkesan untuk mengosongkan senarai?

Adakah `OrderBy (x => r.next ())` Cara yang berkesan untuk mengosongkan senarai?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-31 19:06:10826semak imbas

Is `OrderBy(x => r.next ()) `Cara yang berkesan untuk mengosongkan senarai?

menggunakan OrderBy(x => r.Next()) untuk senarai shuffling: berkesan atau tidak?

Beberapa pengaturcara menggunakan OrderBy(x => r.Next()) untuk mengosongkan senarai, tetapi adakah ini pendekatan terbaik? Mari kita periksa mekanik dan kecekapannya.

Bagaimana ia berfungsi

Kaedah ini memberikan nombor rawak kepada setiap item dalam senarai dan kemudian menyusun senarai berdasarkan nombor rawak ini. Ini berkesan mengemukakan semula senarai secara rawak.

Isu Prestasi

Kelemahan utama adalah prestasi. Kaedah OrderBy mempunyai kerumitan masa O (n log n), menjadikannya lebih perlahan daripada algoritma o (n) yang lain untuk senarai yang lebih besar.

Penyelesaian yang lebih baik: The Fisher-Yates Shuffle

Alternatif yang jauh lebih efisien ialah Shuffle Fisher-Yates (khususnya, varian Durstenfeld), yang menggunakan algoritma swap. Contoh ini menunjukkan kaedah Shuffle yang boleh diguna semula menggunakan pendekatan ini:

<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>

versi yang lebih baik ini menghasilkan unsur -unsur kerana ia mengepam, mengoptimumkan penggunaan memori dan pemprosesan.

Nota penting pada Random

ingat perkara ini ketika bekerja dengan kelas Random:

  • Membuat pelbagai Random contoh berturut -turut boleh membawa kepada urutan nombor rawak yang sama.
  • Kelas Random bukan thread-safe.

rujuk artikel yang dipautkan untuk amalan terbaik menggunakan kelas Random untuk mengelakkan perangkap ini.

Atas ialah kandungan terperinci Adakah `OrderBy (x => r.next ())` Cara yang berkesan untuk mengosongkan senarai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn