Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencari Perbezaan Antara Dua Senarai Objek Tersuai dengan Cekap dalam C#?

Bagaimanakah Saya Boleh Mencari Perbezaan Antara Dua Senarai Objek Tersuai dengan Cekap dalam C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-23 00:44:11814semak imbas

How Can I Efficiently Find the Difference Between Two Lists of Custom Objects in C#?

Perbezaan pengekstrakan senarai objek tersuai generik dalam C#

Andaikan anda mempunyai dua senarai, setiap satu mengandungi objek tersuai dan anda memerlukan cara untuk mendapatkan senarai ketiga yang hanya mengandungi item yang terdapat dalam senarai pertama tetapi tidak dalam elemen kedua.

Untuk tujuan ini, kaedah .Except() adalah pilihan yang sesuai. Kaedah ini menganggap bahawa objek tersuai anda melaksanakan kaedah Equals dan GetHashCode, dengan itu menyediakan cara untuk mentakrifkan kesamaan objek. Menggunakan .Except() adalah mudah:

<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>

Walau bagaimanapun, jika anda perlu mentakrifkan kesaksamaan tersuai berdasarkan sifat tertentu (seperti ID), anda boleh menentukan pelaksanaan IEqualityComparer<T>. Pertimbangkan contoh berikut:

<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject>
{
    public int GetHashCode(CustomObject co)
    {
        if (co == null)
        {
            return 0;
        }
        return co.Id.GetHashCode();
    }

    public bool Equals(CustomObject x1, CustomObject x2)
    {
        if (object.ReferenceEquals(x1, x2))
        {
            return true;
        }
        if (object.ReferenceEquals(x1, null) ||
            object.ReferenceEquals(x2, null))
        {
            return false;
        }
        return x1.Id == x2.Id;
    }
}</code>

Dalam kes ini, anda boleh menggunakan kod berikut untuk mendapatkan semula perbezaan antara dua senarai:

<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>

Untuk kes yang wujudnya pendua, pertimbangkan untuk mencipta set daripada senarai kedua dan gunakan kaedah berikut:

<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>

Ini akan memastikan pendua disimpan dalam senarai keputusan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Perbezaan Antara Dua Senarai Objek Tersuai dengan Cekap dalam C#?. 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