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
Lepaskan: 2025-01-23 00:44:11
asal
721 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan