Bandingkan objek Senarai tidak tertib
Menentukan sama ada dua objek Senarai
Jika bilangan kejadian setiap elemen adalah penting, penyelesaian mudah ialah mengisih kedua-dua senarai sebelum membandingkan:
<code class="language-csharp">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
Penyelesaian pengoptimuman untuk unsur Iequatable
Untuk elemen yang hanya perlu melaksanakan antara muka IEquatable (bukan IComparable), terdapat pendekatan yang lebih cekap:
<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.GetValueOrDefault(s, 0) + 1; } foreach (T s in list2) { if (cnt.ContainsKey(s)) cnt[s] -= 1; else return false; } return cnt.Values.All(x => x == 0); }</code>
Skim ini mengira bilangan kejadian setiap elemen dalam senarai pertama dan kemudian menolak bilangan kejadian daripada senarai kedua. Kedua-dua senarai itu dianggap sama jika setiap kiraan mencapai sifar.
Mengendalikan jenis kunci tersuai
Jika jenis elemen tidak boleh dibandingkan (mis., jenis nullable), anda boleh menentukan pembanding untuk kamus:
<code class="language-csharp">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer) { var cnt = new Dictionary<T, int>(comparer); ... }</code>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Dua Senarai Tidak Tertib untuk Kesamaan dengan Cekap dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!