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

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

Linda Hamilton
Linda Hamiltonasal
2025-01-23 01:05:12845semak imbas

How Can I Efficiently Find Distinct Elements Between Two Lists of Custom Objects in C#?

Sesuaikan perbandingan objek untuk membezakan senarai

Apabila berurusan dengan dua senarai generik yang mengandungi objek tersuai, mengekstrak elemen unik dalam satu senarai (terutamanya yang tidak terdapat dalam senarai lain) ialah operasi yang berguna.

Kaedah

.Except() menyediakan penyelesaian yang cekap untuk ini. Ia menerima dua argumen senarai dan mengembalikan senarai baharu yang mengandungi item yang berada dalam senarai pertama tetapi tidak ditemui dalam senarai kedua.

Timpa kesaksamaan dan perbandingan lalai

Jika jenis objek tersuai anda mengatasi kaedah Equals() dan GetHashCode(), anda boleh menggunakan .Except() seperti berikut:

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

Dalam kes ini, perbandingan objek bergantung pada kaedah gantinya. Sebarang perbezaan kesamarataan akan ditunjukkan dalam perbezaan antara senarai.

Pembanding kesaksamaan tersuai

Walau bagaimanapun, jika kriteria kesaksamaan anda memerlukan pelaksanaan tersuai, anda boleh menentukan sendiri IEqualityComparer<T> anda. Berikut ialah contoh menggunakan ID sebagai asas untuk perbandingan:

<code class="language-csharp">public class IdComparer : IEqualityComparer<customobject>
{
    // ... (实现如提供的答案中所示)
}</code>

Anda kemudian boleh menggunakan pembanding tersuai ini dengan .Except() melalui:

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

Perbandingan tersuai ini akan memastikan operasi .Except() memenuhi keperluan kesaksamaan khusus anda.

Simpan pendua

Perlu diperhatikan bahawa .Except() akan mengecualikan elemen pendua. Jika anda perlu menyimpan pendua, cara lain ialah menukar senarai kedua kepada HashSet dan gunakan ini:

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

Kaedah ini akan mengekalkan semua elemen unik dalam senarai terhasil list3, termasuk pendua.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Elemen Berbeza dengan Cekap Antara Dua Senarai Objek Tersuai 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