Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah LINQ Boleh Mengenalpasti Item Unik dengan Cekap dalam Satu Senarai yang Tidak Hadir daripada Yang Lain?
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!