Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencari Persimpangan Pelbagai Senarai dengan Cekap dalam C#?
Menentukan Elemen Biasa Merentasi Berbilang Senarai C#
Bayangkan anda mempunyai koleksi senarai dan perlu mengenal pasti elemen yang terdapat dalam kesemuanya. Contohnya:
<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 }; var listOfLists = new List<List<int>>() { list1, list2, list3 };</code>
Hasil yang diingini ialah senarai yang mengandungi hanya elemen yang biasa kepada ketiga-tiga senarai: {3}
.
Memanfaatkan IEnumerable.Intersect()
dengan Akumulator Senarai
Satu kaedah yang berkesan melibatkan penggunaan IEnumerable.Intersect()
secara berulang dengan senarai bertindak sebagai penumpuk:
<code class="language-csharp">var intersection = listOfLists.Skip(1) .Aggregate( new List<int>(listOfLists.First()), (list, subList) => list.Intersect(subList).ToList() );</code>
Kod ini bermula dengan senarai pertama dan kemudian bersilang secara berulang dengan setiap senarai berikutnya.
Menggunakan IEnumerable.Intersect()
dengan Akumulator HashSet
Pendekatan yang lebih cekap menggunakan HashSet
sebagai penumpuk, kerana keupayaan persimpangan yang dioptimumkan:
<code class="language-csharp">var intersection = listOfLists.Skip(1) .Aggregate( new HashSet<int>(listOfLists.First()), (h, e) => { h.IntersectWith(e); return h; } );</code>
Versi ini menggunakan IntersectWith()
, operasi yang lebih berprestasi untuk set. Ingat, listOfLists
mesti mengandungi sekurang-kurangnya satu senarai untuk ini berfungsi dengan betul.
Kedua-dua teknik menyediakan cara yang cekap untuk mencari persilangan berbilang senarai menggunakan IEnumerable.Intersect()
. Kaedah HashSet
biasanya lebih disukai kerana kelebihan prestasinya apabila berurusan dengan set data yang lebih besar.
Atas ialah kandungan terperinci Bagaimana untuk Mencari Persimpangan Pelbagai Senarai dengan Cekap dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!