首页 > 后端开发 > C++ > 如何比较两个列表是否相等,忽略元素顺序?

如何比较两个列表是否相等,忽略元素顺序?

Linda Hamilton
发布: 2025-01-21 07:46:13
原创
485 人浏览过

How Can I Compare Two Lists for Equality, Ignoring Element Order?

忽略元素顺序比较列表的等价性

比较两个List<T>对象时,通常需要检查它们的元素是否相等,而不管它们在列表中的位置。以下是实现此目的的几种方法。

1. 元素相等性和出现次数

如果需要两个列表包含相同的元素且出现次数相同,建议在比较之前进行排序:

<code class="language-csharp">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
登录后复制

2. 优化方法

为了提高性能,尤其是在处理大型列表时,可以使用此自定义方法,该方法只需要实现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. 处理可空类型

如果您的元素是可空类型,则可以使用字典的自定义比较器:

<code class="language-csharp">var comparer = EqualityComparer<T>.Default;
var cnt = new Dictionary<T, int>(comparer);</code>
登录后复制

以上是如何比较两个列表是否相等,忽略元素顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板