如何获得数组列表的不同结果?

2023-11-29

我有一个长类型数组的列表。

List<ulong[]> TestList = new List<ulong[]>();

并且列表有以下项目。

{1,2,3,4,5,6},
{2,3,4,5,6,7},
{3,4,5,6,7,8},
{1,2,3,4,5,6}

预期的不同结果是

{1,2,3,4,5,6},
{2,3,4,5,6,7},
{3,4,5,6,7,8}

所以我尝试如下,但没用。

TestList = TestList.Distinct().ToList();

我是否需要一些特殊的比较器来获取不同的列表?


Distinct()使用默认的相等性检查,对于数组来说是引用相等性。它不检查contents数组的相等性。

如果你想这样做,你需要重载Distinct()这需要一个IEqualityComparer<T>。这允许您自定义行为以确定两个项目是否相等。

为了比较数组,IStructuralEquatable和朋友们已经完成了繁重的工作。您可以简单地包装它,如下所示:

sealed class StructuralComparer<T> : IEqualityComparer<T>
{
    public static IEqualityComparer<T> Instance { get; } = new StructuralComparer<T>();

    public bool Equals(T x, T y)
        => StructuralComparisons.StructuralEqualityComparer.Equals(x, y);

    public int GetHashCode(T obj)
        => StructuralComparisons.StructuralEqualityComparer.GetHashCode(obj);
}

然后,在Distinct()像这样调用:

TestList = TestList.Distinct(StructuralComparer<ulong[]>.Instance).ToList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获得数组列表的不同结果? 的相关文章

随机推荐