Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencari Perbezaan Antara Dua Senarai dengan Cekap dalam C# Menggunakan .Except() dan IEqualityComparer?

Bagaimanakah Saya Boleh Mencari Perbezaan Antara Dua Senarai dengan Cekap dalam C# Menggunakan .Except() dan IEqualityComparer?

Susan Sarandon
Susan Sarandonasal
2025-01-23 00:58:10250semak imbas

How Can I Efficiently Find the Difference Between Two Lists in C# Using .Except() and 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!

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