Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Cekap Mencari Persimpangan Pelbagai Senarai dalam C# menggunakan IEnumerable.Intersect()?

Bagaimana untuk Cekap Mencari Persimpangan Pelbagai Senarai dalam C# menggunakan IEnumerable.Intersect()?

DDD
DDDasal
2025-01-15 11:21:44693semak imbas

How to Efficiently Find the Intersection of Multiple Lists in C# using IEnumerable.Intersect()?

Gunakan IEnumerable.Intersect() untuk mencari persilangan berbilang senarai dengan cekap dalam C#

Dalam bidang analisis dan pemprosesan data, mencari persilangan berbilang senarai adalah tugas yang sangat biasa. Walaupun terdapat pelbagai cara untuk menyelesaikan masalah ini, menggunakan kaedah IEnumerable.Intersect() menyediakan penyelesaian yang cekap. Artikel ini meneroka cara menggunakan kaedah ini untuk mengenal pasti dan mendapatkan semula persilangan berbilang senarai.

Dalam C#, apabila digunakan pada berbilang jujukan, kaedah IEnumerable.Intersect() boleh digunakan untuk mendapatkan elemen yang sama kepada semua jujukan. Untuk melihat cara menggunakan kaedah ini untuk mencari persilangan berbilang senarai, pertimbangkan contoh berikut:

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

// 预期交集为 List<int>() { 3 };</code>

Untuk mencari persilangan senarai ini menggunakan IEnumerable.Intersect() kita boleh menggunakan kaedah berikut:

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

Dalam penyelesaian ini kami:

  1. Langkau senarai pertama: Kami mula-mula menggunakan Langkau(1) untuk melangkau senarai pertama dalam listOfLists. Ini adalah perlu untuk memulakan proses pengagregatan dengan senarai kedua.
  2. Pengagregatan: Kami menggunakan kaedah Agregat untuk mengumpul hasil persilangan. Fungsi pengagregatan menerima dua parameter: nilai benih dan fungsi yang akan dilaksanakan pada setiap elemen berikutnya.
  3. Mencipta HashSet: Kami mencipta HashSet daripada senarai pertama sebagai persimpangan awal. HashSet digunakan kerana ia berkesan mengenal pasti elemen pendua dan menyokong operasi persimpangan yang pantas.
  4. Bersilang dengan setiap senarai: Untuk setiap senarai berikutnya, kami memanggil IntersectWith() pada HashSet. Kaedah ini mengemas kini HashSet supaya ia mengandungi hanya elemen yang biasa kepada kedua-dua HashSet dan senarai semasa.
  5. Mengembalikan persimpangan: Selepas semua senarai telah diproses, HashSet mengandungi persilangan semua senarai. Kami mengembalikan HashSet ini sebagai persimpangan.

Penyelesaian ini menyediakan cara ringkas dan cekap untuk mencari persilangan berbilang senarai menggunakan IEnumerable.Intersect(). Ia memanfaatkan ciri pengoptimuman HashSet untuk mengendalikan elemen pendua dan melaksanakan operasi persimpangan yang pantas.

Adalah penting untuk ambil perhatian bahawa listOfLists hendaklah sentiasa mengandungi sekurang-kurangnya satu senarai untuk memulakan persimpangan dengannya. Jika senarai itu kosong, ArgumentNullException dilemparkan.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Persimpangan Pelbagai Senarai dalam C# 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