Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mendapatkan Elemen Unik dengan Cekap dalam Satu Senarai Yang Tiada dalam Senarai Lain?
Bandingkan perbezaan antara dua senarai
Apabila berurusan dengan dua senarai yang mengandungi objek tersuai, selalunya perlu mengenal pasti elemen unik dalam senarai pertama yang tidak terdapat dalam senarai kedua. Masalah ini boleh diselesaikan dengan cekap menggunakan kaedah .Except()
.
Sebagai contoh, pertimbangkan dua senarai list1
dan list2
, kedua-duanya mengandungi tika CustomObject
. Untuk mengekstrak unsur unik list1
, hanya gunakan kod berikut:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Pendekatan mudah ini menganggap bahawa jenis CustomObject
mengatasi kaedah Equals()
dan GetHashCode()
, membenarkan kesamaan dan perbandingan cincang yang betul.
Walau bagaimanapun, jika perbandingan yang lebih terperinci diperlukan, contohnya berdasarkan atribut tertentu (seperti ID), pembanding kesaksamaan tersuai mesti dilaksanakan. Seperti yang ditunjukkan di bawah, ini memerlukan penentuan kelas yang melaksanakan antara muka IEqualityComparer<T>
:
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) { return co.Id.GetHashCode(); } public bool Equals(CustomObject x1, CustomObject x2) { return x1.Id == x2.Id; } }</code>
Menggunakan pembanding tersuai ini, kod berikut akan mencapai perbandingan yang diingini:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Adalah penting untuk ambil perhatian bahawa kaedah ini akan menghapuskan sebarang unsur pendua dalam hasilnya. Jika pendua perlu dikekalkan, strategi alternatif menggunakan set dan klausa where
adalah lebih sesuai:
<code class="language-csharp">var set2 = new HashSet<CustomObject>(list2); var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Elemen Unik dengan Cekap dalam Satu Senarai Yang Tiada dalam Senarai Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!