筛选列表中的重复项

守门人

我有一个要过滤重复项的列表。在问这个问题之前,我在StackOverflow上进行了搜索,找到了两个解决方案。使用.Distinct()和使用HashSet,但是这些方法都不适合我。我尝试过滤的对象实现了该.Equals方法,但仍然无法正常工作。

我通过创建500个完全相同的对象并将其放在列表中进行了测试。我希望剩下1个,但所有500个都还在那里。我的对象是否需要实现其他方法才能起作用?

谢谢。

蒂姆·施密特

如果您Equals始终覆盖,也请覆盖GetHashCode

当覆盖Equals方法时,覆盖GetHashCode为什么很重要?

这是一个简单的类来演示可能的实现。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;
    }
}

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

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;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用linq筛选列表以删除重复项

来自分类Dev

如何使用sort,uniq或awk从大量列表中筛选出重复项?

来自分类Dev

列表中的方案重复项

来自分类Dev

在列表中查找重复项

来自分类Dev

删除列表中的重复项

来自分类Dev

返回列表中的重复项

来自分类Dev

列表中重复项的getCount

来自分类Dev

列表中重复项的python列表索引

来自分类Dev

删除列表列表中的重复项

来自分类Dev

Python-减少重复项列表,但如果重复项则保留列表中的重复项

来自分类Dev

从SML中的列表中删除重复项

来自分类Dev

从Scheme中的列表中删除重复项

来自分类Dev

在列表中搜索Python中的重复项

来自分类Dev

从列表中的元组中删除重复项

来自分类Dev

使用Distinct删除列表中的重复项

来自分类Dev

从类别列表中删除重复项

来自分类Dev

在忽略字段的列表中查找重复项

来自分类Dev

OneToMany注释列表中的重复项

来自分类Dev

Python从列表中删除几个重复项

来自分类Dev

如何在列表中查找重复项?

来自分类Dev

在列表中查找连续的重复项

来自分类Dev

从元组列表中删除重复项

来自分类Dev

在无序列表中查找重复项

来自分类Dev

从配对列表中删除“重复项”

来自分类Dev

从numPy数组列表中删除重复项

来自分类Dev

从排序列表中删除重复项

来自分类Dev

Python-列表中重复项的索引

来自分类Dev

计算OCaml列表中重复项的数量

来自分类Dev

LINQ:返回列表中的非重复项