gpt4 book ai didi

c# - 如何正确使用 distinct 和 compare?

转载 作者:行者123 更新时间:2023-11-30 15:06:02 28 4
gpt4 key购买 nike

我正在使用 distinct 表示

Returns distinct elements from a sequence by using the default equality comparer to compare values.

但是当我运行这段代码时,我得到了多个相同的 id

        var ls = ls2.Distinct().OrderByDescending(s => s.id);
foreach (var v in ls)
{
Console.WriteLine(v.id);
}

我在我的类里面实现了这些,但仍然不起作用

class Post : IComparable<Post>, IEqualityComparer<Post>, IComparer<Post>

我是这样实现的

                int IComparable<Post>.CompareTo(Post other)
{
return (int)(id - other.id);
}

bool IEqualityComparer<Post>.Equals(Post x, Post y)
{
return x.id == y.id;
}

int IEqualityComparer<Post>.GetHashCode(Post obj)
{
throw new NotImplementedException();
}

int IComparer<Post>.Compare(Post x, Post y)
{
return (int)(x.id - y.id);
}

最佳答案

您应该实现 GetHashCode()

既然您要委托(delegate)给 -== 为什么不委托(delegate)给 id 中的适当函数。 IE。 id.Compare(other.id),和obj.id.GetHashCode(),委托(delegate)Comparer进行Compare。并且还实现了IEquatable

            int IComparable<Post>.CompareTo(Post other)
{
return id.Compare(other.id);
}

bool IEquatable<Post>.Equals(Post x)
{
return id == y.id;
}


bool IEqualityComparer<Post>.Equals(Post x, Post y)
{
return x.Equals(y.id);
}

int IEqualityComparer<Post>.GetHashCode(Post obj)
{
return obj.id.GetHashCode();
}

int IComparer<Post>.Compare(Post x, Post y)
{
return x.Compare(y);
}

这假设 id 是一个 int,如果不是,那么您也可以为 IEquatable 实现这些 id。

关于c# - 如何正确使用 distinct 和 compare?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8371303/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com