List<ClassA> newlist;
List<ClassA> oldlist;
ClassA
有 20 个不同的属性,
我要
- 比较并从新列表中删除完全匹配的项目
- 但是比较必须从
ClassA
中排除一些属性,因为值不相关 - 我正在处理的记录集巨大(30 万到 40 万)。所以它必须高效
Linq Except
或 Intersect
似乎不支持上述要求,而且速度似乎也很慢。
有什么建议可以实现这一目标吗?
最佳答案
您可以实现自己的自定义比较器
public class MyEqualityComparer: IEqualityComparer<ClassA> {
public bool Equals(ClassA x, ClassA y) {
if (Object.ReferenceEquals(x, y))
return true;
else if ((null == x) || (null == y))
return false;
// Your custom comparison here (...has to exclude few properties from ClassA)
...
}
public int GetHashCode(ClassA obj) {
if (null == obj)
return 0;
// Your custom hash code based on the included properties
...
}
}
并使用HashSet<ClassA>
然后(我们想从 oldlist
中排除 newlist
):
HashSet<ClassA> toExclude = new HashSet<ClassA>(
oldlist,
new MyEqualityComparer());
newList.RemoveAll(item => toExclude.Conytains(item));
关于C# list - 通过比较特定属性消除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40994536/