Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencari Perbezaan Antara Dua Senarai dengan Cekap dalam C# Menggunakan .Except() dan IEqualityComparer?
Membanding dan Mengenalpasti Perbezaan Antara Senarai C#
Menentukan perbezaan antara dua senarai dengan cekap adalah tugas biasa dalam pengaturcaraan C#. Kaedah .Except()
menawarkan penyelesaian yang berkuasa, tetapi aplikasinya boleh diwarnakan, terutamanya apabila bekerja dengan objek tersuai.
Menggunakan .Except()
dengan Kesamaan Jenis Rujukan
Untuk objek tersuai (cth., CustomObjects
) yang mengatasi kaedah Equals()
dan GetHashCode()
dengan betul, menggunakan .Except()
adalah mudah:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Ini mencipta list3
, mengandungi unsur daripada list1
yang tiada dalam list2
.
Perbandingan Kesaksamaan Tersuai dengan IEqualityComparer
Semakan kesaksamaan yang lebih kompleks, seperti membandingkan berdasarkan sifat tertentu (seperti Id
), memerlukan pelaksanaan antara muka IEqualityComparer<T>
. Berikut ialah contoh:
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) => co.Id.GetHashCode(); public bool Equals(CustomObject x1, CustomObject x2) => x1.Id == x2.Id; }</code>
Kemudian, gunakan pembanding ini dengan .Except()
:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Mengendalikan Elemen Pendua
Standard .Except()
mengalih keluar pendua. Untuk memeliharanya, gunakan alternatif ini:
<code class="language-csharp">var set2 = new HashSet<CustomObject>(list2); var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Ini memanfaatkan HashSet
untuk semakan keahlian yang cekap, menghasilkan list3
dengan pendua dikekalkan. Ambil perhatian bahawa susunan unsur dalam list3
mungkin berbeza daripada yang asal list1
.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Perbezaan Antara Dua Senarai dengan Cekap dalam C# Menggunakan .Except() dan IEqualityComparer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!