Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencari Elemen Berbeza dengan Cekap Antara Dua Senarai Objek Tersuai dalam 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!