Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mencari Persilangan Pelbagai Senarai Menggunakan IEnumerable.Intersect()?

Bagaimana Mencari Persilangan Pelbagai Senarai Menggunakan IEnumerable.Intersect()?

Patricia Arquette
Patricia Arquetteasal
2025-01-15 11:36:48707semak imbas

How to Find the Intersection of Multiple Lists Using IEnumerable.Intersect()?

Gunakan IEnumerable.Intersect() untuk mencari persilangan berbilang senarai

Kaedah IEnumerable.Intersect() dalam C# membolehkan anda mencari elemen sepunya dalam dua jujukan. Tetapi bagaimana jika anda mempunyai berbilang senarai dan ingin mengenal pasti elemen yang terdapat dalam semua senarai?

Soalan:

Diberi senarai senarai integer:

<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>

Bagaimana untuk menggunakan IEnumerable.Intersect() untuk mencari persilangan senarai ini dan mendapatkan senarai hasil() { 3 }?

Penyelesaian 1: Pengagregatan HashSet

<code class="language-csharp">var intersection = listOfLists
    .Skip(1)
    .Aggregate(
        new HashSet<int>(listOfLists.First()),
        (h, e) => { h.IntersectWith(e); return h; }
    );</code>

Penyelesaian ini menggunakan kaedah Aggregate() untuk mengumpul HashSet yang mewakili persilangan senarai. Kaedah Langkau(1) memastikan bahawa senarai pertama dalam listOfLists digunakan sebagai nilai awal untuk HashSet.

Penyelesaian 2: Lelaran HashSet

<code class="language-csharp">var intersection = new HashSet<int>(listOfLists.First());

foreach (var list in listOfLists.Skip(1))
{
    var intersect = new HashSet<int>(intersection);
    intersection.IntersectWith(list);
}</code>

Penyelesaian ini juga menggunakan HashSet, tetapi ia berulang pada senarai yang tinggal, mencipta HashSet baharu untuk setiap persimpangan.

Pertimbangan prestasi:

Tanda aras prestasi menunjukkan bahawa dalam kebanyakan kes, penyelesaian HashSet mengatasi prestasi menggunakan Senarai. Perbezaan prestasi antara kaedah foreach dan kaedah Agregat adalah diabaikan.

Atas ialah kandungan terperinci Bagaimana Mencari Persilangan Pelbagai Senarai Menggunakan IEnumerable.Intersect()?. 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