Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah LINQ Boleh Mengenalpasti Item Unik dengan Cekap dalam Satu Senarai yang Tidak Hadir daripada Yang Lain?

Bagaimanakah LINQ Boleh Mengenalpasti Item Unik dengan Cekap dalam Satu Senarai yang Tidak Hadir daripada Yang Lain?

Barbara Streisand
Barbara Streisandasal
2025-01-19 18:46:14714semak imbas

How Can LINQ Efficiently Identify Unique Items in One List That Are Absent from Another?

Gunakan LINQ untuk mengenal pasti item unik dengan cekap

LINQ (Language Integrated Query) menyediakan set alat serba boleh untuk pertanyaan data dengan cara yang ringkas dan cekap. Senario biasa melibatkan mengenal pasti item yang terdapat dalam satu senarai tetapi tidak dalam senarai yang lain.

Pertimbangkan coretan kod berikut:

<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        List<Person> peopleList1 = new List<Person>();
        peopleList1.Add(new Person() { ID = 1 });
        peopleList1.Add(new Person() { ID = 2 });
        peopleList1.Add(new Person() { ID = 3 });

        List<Person> peopleList2 = new List<Person>();
        peopleList2.Add(new Person() { ID = 1 });
        peopleList2.Add(new Person() { ID = 2 });
        peopleList2.Add(new Person() { ID = 3 });
        peopleList2.Add(new Person() { ID = 4 });
        peopleList2.Add(new Person() { ID = 5 });
    }
}

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

Pernyataan masalah: Memandangkan dua senarai, peopleList1 dan peopleList2, tulis pertanyaan LINQ untuk menentukan orang unik yang wujud dalam peopleList2 tetapi bukan dalam peopleList1. Dalam contoh ini, hasil yang dikehendaki ialah orang yang mempunyai ID 4 dan ID 5.

Penyelesaian LINQ: Pertanyaan LINQ berikut berkesan menyelesaikan masalah ini:

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

Pertanyaan ini menggunakan kaedah Where(), yang menapis item dalam peopleList2 berdasarkan kriteria yang ditentukan. Dalam kes ini, syarat menyemak sama ada mana-mana item dalam peopleList1 mempunyai ID yang sepadan dengan item semasa dalam peopleList2. Jika tidak ditemui (!peopleList1.Any() == benar), item tersebut disertakan dalam set hasil.

Ungkapan alternatif: Sebagai alternatif, pertanyaan boleh dinyatakan seperti berikut:

<code class="language-csharp">var result = peopleList2.Where(p => peopleList1.All(p2 => p2.ID != p.ID));</code>

Varian ini menggunakan kaedah All() untuk menilai sama ada semua item dalam peopleList1 mempunyai ID yang berbeza daripada item semasa dalam peopleList2. Jika syarat ini benar (peopleList1.All() == benar), item tersebut disertakan dalam set hasil.

Nota: Adalah penting untuk ambil perhatian bahawa kerumitan pengiraan kedua-dua kaedah ialah O(n*m), dengan n mewakili bilangan item dalam peopleList1 dan m mewakili bilangan item dalam peopleList2. Ini bermakna untuk set data yang besar, operasi ini mungkin perlahan. Jika prestasi menjadi isu, pertimbangkan kaedah lain seperti jadual cincang atau operasi set.

Atas ialah kandungan terperinci Bagaimanakah LINQ Boleh Mengenalpasti Item Unik dengan Cekap dalam Satu Senarai yang Tidak Hadir daripada Yang 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