Strategi untuk membandingkan perbezaan dengan cekap dalam senarai besar
Membandingkan perbezaan boleh menjadi sangat intensif sumber apabila bekerja dengan senarai besar. Walaupun kaedah Contains()
LINQ adalah amalan biasa, ia tidak cekap untuk set data besar-besaran. Penyelesaian yang lebih baik ialah menggunakan kaedah Except()
.
Gunakan kaedah Except()
KaedahExcept()
berfungsi pada IEnumerable
dan mencari elemen yang terdapat dalam satu senarai tetapi tidak dalam senarai yang lain. Dengan menggunakan Except()
pada kedua-dua senarai, kami mendapat dua senarai baharu:
firstNotSecond
: Mengandungi elemen yang berada dalam senarai pertama tetapi tiada dalam senarai kedua. secondNotFirst
: Mengandungi elemen daripada senarai kedua yang tiada daripada senarai pertama. Kaedah ini jauh lebih pantas daripada menggunakan semakan Contains()
. Contohnya:
<code class="language-csharp">var firstNotSecond = list1.Except(list2).ToList(); var secondNotFirst = list2.Except(list1).ToList();</code>
Keputusan digabungkan
Jika mahu, keputusan boleh digabungkan menjadi satu pernyataan:
<code class="language-csharp">return !firstNotSecond.Any() && !secondNotFirst.Any();</code>
Pernyataan ini dinilai kepada true
jika dua senarai input mengandungi elemen yang sama dan false
sebaliknya.
Nota tentang elemen berulang
Perlu diperhatikan bahawa kaedah Except()
mengendalikan elemen berulang secara berbeza daripada kaedah Contains()
. Dalam kod asal, elemen pendua dalam senarai pertama yang tidak terdapat dalam senarai kedua telah dilaporkan beberapa kali. Walau bagaimanapun, Except()
hanya melaporkan setiap elemen berulang sekali. Perbezaan ini harus diambil kira apabila menggunakan penyelesaian ini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Dua Senarai Besar untuk Perbezaan dalam C# dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!