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
Lepaskan: 2025-01-23 01:05:12
asal
857 orang telah melayarinya

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:

var list3 = list1.Except(list2).ToList();
Salin selepas log masuk

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:

public class IdComparer : IEqualityComparer<customobject>
{
    // ... (实现如提供的答案中所示)
}
Salin selepas log masuk

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

var list3 = list1.Except(list2, new IdComparer()).ToList();
Salin selepas log masuk

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:

var list3 = list1.Where(x => !set2.Contains(x)).ToList();
Salin selepas log masuk

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 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