Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah IEnumerable.Intersect() Boleh Mencari Persimpangan Pelbagai Senarai dengan Cekap?
Cari persilangan berbilang senarai dengan cekap: kaedah IEnumerable.Intersect()
Dalam pengaturcaraan, menentukan persilangan berbilang senarai adalah masalah biasa. Masalah ini boleh diselesaikan dengan mudah dengan bantuan kaedah IEnumerable.Intersect()
.NET yang berkuasa.
Anggap senario berikut: Kami mempunyai senarai senarai dan kami ingin mencari elemen yang terdapat dalam semua senarai. Contohnya, diberikan tiga senarai:
<code class="language-csharp">var list1 = new List<int>() { 1, 2, 3 }; var list2 = new List<int>() { 2, 3, 4 }; var list3 = new List<int>() { 3, 4, 5 };</code>
Persimpangan yang dijangkakan ialah senarai:
<code class="language-csharp">{ 3 }</code>
Persimpangan ini boleh dikira dengan cekap menggunakan IEnumerable.Intersect()
. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa kaedah ini memerlukan kami menyediakan IEnumerable<T>
sebagai input.
Untuk memenuhi keperluan ini, kami boleh mengagregatkan berbilang IEnumerable<T>
objek ke dalam satu senarai, seperti yang ditunjukkan dalam penyelesaian berikut:
<code class="language-csharp">var listOfLists = new List<List<int>>() { list1, list2, list3 }; var intersection = listOfLists .Skip(1) .Aggregate( new HashSet<int>(listOfLists.First()), (h, e) => { h.IntersectWith(e); return h; } );</code>
Kod ini berulang pada senarai dalam listOfLists
(kecuali senarai pertama) dan kemas kini HashSet.IntersectWith()
dengan persilangan HashSet
dengan senarai semasa. Proses yang cekap ini akhirnya menghasilkan persimpangan yang diingini, disimpan dalam pembolehubah intersection
.
Penyelesaian ini memanfaatkan HashSet
dengan berkesan, yang dioptimumkan untuk operasi persimpangan yang pantas. Selain itu, kod itu bersih dan ringkas, menjadikannya sesuai untuk tugasan ini.
Atas ialah kandungan terperinci Bagaimanakah IEnumerable.Intersect() Boleh Mencari Persimpangan Pelbagai Senarai dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!