Abaikan susunan elemen untuk perbandingan kesetaraan senarai
Apabila membandingkan dua List<T>
objek, anda biasanya ingin menyemak sama ada elemennya adalah sama, tanpa mengira kedudukannya dalam senarai. Berikut adalah beberapa cara untuk mencapainya.
1. Kesamaan unsur dan bilangan kejadian
Jika anda memerlukan dua senarai untuk mengandungi elemen yang sama dengan bilangan kejadian yang sama, adalah disyorkan untuk mengisih sebelum membandingkan:
<code class="language-csharp">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
2. Kaedah Pengoptimuman
Untuk meningkatkan prestasi, terutamanya apabila berurusan dengan senarai besar, anda boleh menggunakan kaedah tersuai ini, yang hanya perlu melaksanakan IEquatable
:
<code class="language-csharp">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2) { var cnt = new Dictionary<T, int>(); foreach (T s in list1) { cnt[s] = cnt.ContainsKey(s) ? cnt[s] + 1 : 1; } foreach (T s in list2) { if (cnt.ContainsKey(s)) { cnt[s]--; } else { return false; } } return cnt.Values.All(c => c == 0); }</code>
3. Mengendalikan jenis nullable
Jika elemen anda daripada jenis nullable, anda boleh menggunakan pembanding tersuai kamus:
<code class="language-csharp">var comparer = EqualityComparer<T>.Default; var cnt = new Dictionary<T, int>(comparer);</code>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Dua Senarai untuk Kesaksamaan, Mengabaikan Susunan Unsur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!