Rumah >pembangunan bahagian belakang >C++ >Apakah Pendekatan LINQ Optimum untuk Mendapatkan Subset Rawak?
Dalam dunia pengaturcaraan, selalunya perlu untuk mengekstrak subset rawak daripada koleksi tertentu. Bagi peminat LINQ, anda mungkin tertanya-tanya tentang cara yang optimum untuk mencapai matlamat ini.
Satu pendekatan ialah menggunakan kaedah sambungan .Shuffle(), yang melakukan shuffle Fisher-Yates-Durstenfeld. Kaedah ini secara berkesan secara rawak tertib unsur dalam koleksi, menjadikannya penyelesaian ideal untuk mencipta sub-koleksi rawak.
Untuk menggambarkan penggunaannya, katakan anda mempunyai koleksi bernama yourCollection dengan N item dan ingin ekstrak n item rawak di mana n <= N. Begini cara anda boleh melaksanakannya menggunakan .Shuffle() kaedah:
var randomItems = yourCollection.Shuffle().Take(n);
Kod ini mula-mula merombak elemen dalam yourCollection menggunakan kaedah .Shuffle(). Ia kemudian menggunakan kaedah .Take() untuk mengekstrak n item pertama daripada koleksi yang dikocok. Hasilnya ialah sub-koleksi rawak kiraan n.
Berikut ialah contoh pelaksanaan kaedah sambungan .Shuffle() sendiri:
public static class EnumerableExtensions { public static IEnumerableShuffle (this IEnumerable source) { return source.Shuffle(new Random()); } public static IEnumerable Shuffle ( this IEnumerable source, Random rng) { if (source == null) throw new ArgumentNullException(nameof(source)); if (rng == null) throw new ArgumentNullException(nameof(rng)); return source.ShuffleIterator(rng); } private static IEnumerable ShuffleIterator ( this IEnumerable source, Random rng) { var buffer = source.ToList(); for (int i = 0; i < buffer.Count; i++) { int j = rng.Next(i, buffer.Count); yield return buffer[j]; buffer[j] = buffer[i]; } } } Dengan menggunakan kaedah sambungan ini, anda boleh dengan mudah kocok dan ekstrak sub-koleksi rawak sebarang saiz dari dalam pertanyaan LINQ. Teknik ini menawarkan penyelesaian yang mudah dan cekap untuk tugas manipulasi data biasa.
Atas ialah kandungan terperinci Apakah Pendekatan LINQ Optimum untuk Mendapatkan Subset Rawak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!