gpt4 book ai didi

c# - 过滤列表中的重复项

转载 作者:行者123 更新时间:2023-11-30 13:57:42 24 4
gpt4 key购买 nike

我有一个列表,我想过滤掉重复的项目。在问这个问题之前,我在 StackOverflow 上进行了搜索,找到了两个解决方案;使用 .Distinct() 并使用 HashSet,但是这些方法都不适合我。我试图过滤的对象实现了 .Equals 方法,但它仍然不起作用。

我通过创建 500 个完全相同的对象并将它们放入列表中来对此进行测试。我预计会留下 1 个,但所有 500 个都还在那里。我的对象是否需要实现其他方法才能使其正常工作?

谢谢。

最佳答案

如果您重写 Equals,也总是重写 GetHashCode

Why is it important to override GetHashCode when Equals method is overridden?

这里有一个简单的类来演示可能的实现。 GetHashCode 应该是高效的并且应该产生很少的冲突:

public class Foo
{
public int ID { get; set; }
public string Name { get; set; }

public override bool Equals(object obj)
{
Foo other = obj as Foo;
if (other == null) return false;
return this.ID == other.ID;
}

public override int GetHashCode()
{
return ID;
}
}

Here's如果您的相等性检查需要包含多个属性或一个集合,则另一种实现:

public override int GetHashCode()
{
unchecked // Overflow is fine, just wrap
{
int hash = 17;
// Suitable nullity checks etc, of course :)
hash = hash * 23 + field1.GetHashCode();
hash = hash * 23 + field2.GetHashCode();
hash = hash * 23 + field3.GetHashCode();
return hash;
}
}

关于c# - 过滤列表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20002422/

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