Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah LINQ Boleh Menapis Item dengan Cekap dalam Satu Senarai Berdasarkan Kehadiran Item dalam Senarai Lain?

Bagaimanakah LINQ Boleh Menapis Item dengan Cekap dalam Satu Senarai Berdasarkan Kehadiran Item dalam Senarai Lain?

Barbara Streisand
Barbara Streisandasal
2025-01-19 18:27:10313semak imbas

How Can LINQ Efficiently Filter Items in One List Based on the Presence of Items in Another List?

Gunakan pertanyaan LINQ untuk menapis item dalam senarai

LINQ menyediakan cara yang cekap untuk menapis item dalam senarai berdasarkan sama ada item itu wujud dalam senarai lain. Sila lihat contoh kod di bawah:

<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        // 示例数据
        List<Person> peopleList1 = new List<Person>() { new Person() { ID = 1 }, new Person() { ID = 2 }, new Person() { ID = 3 } };
        List<Person> peopleList2 = new List<Person>() { new Person() { ID = 1 }, new Person() { ID = 2 }, new Person() { ID = 3 }, new Person() { ID = 4 }, new Person() { ID = 5 } };
    }
}

class Person
{
    public int ID { get; set; }
}</code>

Kita perlu mencari item dalam peopleList2 yang tiada dalam peopleList1. Ini boleh dicapai melalui LINQ.

Gunakan kaedah Except()

LINQ menyediakan kaedah Except(), yang mengembalikan semua elemen dalam senarai pertama yang tiada dalam senarai kedua. Kita boleh menggunakannya seperti berikut:

<code class="language-csharp">var result = peopleList2.Except(peopleList1);</code>

Ini akan mengembalikan koleksi yang mengandungi orang dengan ID 4 dan 5.

Gunakan sintaks pertanyaan LINQ

LINQ juga membenarkan kami melakukan operasi penapisan menggunakan sintaks pertanyaan. Berikut ialah satu cara untuk mencapai hasil yang sama menggunakan sintaks pertanyaan:

<code class="language-csharp">var result = from p in peopleList2
             where !peopleList1.Any(p2 => p2.ID == p.ID)
             select p;</code>

Pertanyaan ini menghasilkan hasil yang sama seperti kaedah Except().

Penerangan Prestasi:

Perlu diambil perhatian bahawa kerumitan masa kedua-dua kaedah ialah O(n*m), dengan n dan m ialah saiz kedua-dua senarai yang dibandingkan. Ini bermakna apabila saiz senarai bertambah, masa yang diperlukan untuk operasi penapisan meningkat dengan ketara. Untuk set data yang besar, kaedah lain mungkin perlu diterokai untuk mengoptimumkan prestasi.

Atas ialah kandungan terperinci Bagaimanakah LINQ Boleh Menapis Item dengan Cekap dalam Satu Senarai Berdasarkan Kehadiran Item dalam Senarai Lain?. 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