Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mendapatkan Subset Rawak Koleksi Dengan Cekap Menggunakan LINQ?

Bagaimanakah Saya Boleh Mendapatkan Subset Rawak Koleksi Dengan Cekap Menggunakan LINQ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-06 03:17:42510semak imbas

How Can I Efficiently Retrieve a Random Subset of a Collection Using LINQ?

Mengambil SubKoleksi Rawak dengan Cekap dengan Kocok

Cabaran untuk mendapatkan subset rawak koleksi sering dihadapi dalam pengaturcaraan. LINQ menyediakan mekanisme serba boleh untuk memanipulasi pengumpulan data, dan pembangun sering mencari pendekatan yang dioptimumkan untuk mendapatkan subset rawak.

Penyelesaian Cadangan: Melaksanakan Fisher-Yates-Durstenfeld Shuffle

Satu optimum kaedah untuk mencapai ini adalah melalui shuffle Fisher-Yates-Durstenfeld. Teknik ini melibatkan pemilihan elemen rawak secara berulang daripada koleksi sumber dan menukarnya dengan elemen terakhir yang tidak diisih, memastikan setiap elemen mempunyai peluang yang sama untuk dipilih.

Pelaksanaan melalui Kaedah Sambungan

Untuk meningkatkan kefungsian LINQ, kaedah sambungan yang dipanggil Shuffle telah dibangunkan, yang menggabungkan Fisher-Yates-Durstenfeld shuffle. Kaedah ini menerima input IEnumerable dan mengembalikan urutan yang dikocok. Selain itu, ia menyokong penghantaran contoh Rawak untuk penyesuaian.

Pelaksanaan melibatkan penukaran koleksi sumber kepada Senarai, memastikan akses rawak masa berterusan. Elemen kemudian ditukar secara berurutan untuk mencipta pilih atur rawak.

Contoh Penggunaan

Untuk menggunakan kaedah sambungan Kocok:

  1. Import ruang nama tempat sambungan ditakrifkan.
  2. Panggil kaedah Kocok pada sumber anda koleksi.
  3. Secara pilihan, nyatakan contoh Rawak untuk penyesuaian.
  4. Gunakan urutan kocok yang terhasil mengikut keperluan.

Contoh Kod

Coretan kod yang disediakan menunjukkan cara menggunakan sambungan Kocok untuk mendapatkan kocok subkoleksi saiz yang ditentukan:

// take n random items from yourCollection
var randomItems = yourCollection.Shuffle().Take(n);

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Subset Rawak Koleksi Dengan Cekap Menggunakan LINQ?. 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