Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencari Persimpangan Pelbagai Senarai dengan Cekap dalam C#?

Bagaimana untuk Mencari Persimpangan Pelbagai Senarai dengan Cekap dalam C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-15 11:49:47660semak imbas

How to Efficiently Find the Intersection of Multiple Lists in 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!

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