C#中高效率比較具有相同元素和出現次數的無序列表
在C#中,當元素的順序不重要時,比較兩個清單的相等性可能具有挑戰性。對於包含多個相同元素的列表,確定等價性變得更加複雜。
考慮比較List
排序後比較
一種直接的方法是在比較之前對兩個清單進行排序。使用以下程式碼片段,您可以檢查元素相等性和順序無關性:
<code class="language-c#">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
基於字典的比較
為了提高效能,請考慮使用ScrambledEquals方法,該方法利用字典來計算元素出現的次數:
<code class="language-c#">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2)</code>
此方法使用字典填滿鍵,表示唯一元素,數值表示list1中每個元素出現的次數。然後,它遍歷list2,遞減匹配元素的計數。如果list2中的任何元素在字典中找不到或計數不匹配,則函數傳回false。最後,它確保字典中的所有計數都為零,這表示兩個列表中的出現次數相等。
處理可空型
為了適應可空型別或任何資料型別作為字典鍵,請在ScrambledEquals方法中提供自訂比較器:
<code class="language-c#">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer)</code>
透過結合此功能,您可以有效地比較列表,而不管元素的順序和計數如何。
以上是如何在 C# 中有效比較兩個具有重複元素的無序列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!