首页 >后端开发 >C++ >如何在 C# 中有效比较两个具有重复元素的无序列表?

如何在 C# 中有效比较两个具有重复元素的无序列表?

Linda Hamilton
Linda Hamilton原创
2025-01-21 07:57:08324浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn