首頁 > 後端開發 > C++ > 如何在 C# 中有效比較兩個具有重複元素的無序列表?

如何在 C# 中有效比較兩個具有重複元素的無序列表?

Linda Hamilton
發布: 2025-01-21 07:57:08
原創
323 人瀏覽過

How Can I Efficiently Compare Two Unordered Lists with Duplicate Elements in C#?

C#中高效率比較具有相同元素和出現次數的無序列表

在C#中,當元素的順序不重要時,比較兩個清單的相等性可能具有挑戰性。對於包含多個相同元素的列表,確定等價性變得更加複雜。

考慮比較List 物件list1和list2的任務,其中每個元素的出現次數在兩個清單中都應該相同。為此,需要一個多步驟的方法。

排序後比較

一種直接的方法是在比較之前對兩個清單進行排序。使用以下程式碼片段,您可以檢查元素相等性和順序無關性:

<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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板