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

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

Patricia Arquette
Lepaskan: 2025-01-15 11:36:48
asal
737 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan