首页 > 后端开发 > C++ > 如何在 C# 中有效地查找两个自定义对象列表之间的不同元素?

如何在 C# 中有效地查找两个自定义对象列表之间的不同元素?

Linda Hamilton
发布: 2025-01-23 01:05:12
原创
857 人浏览过

How Can I Efficiently Find Distinct Elements Between Two Lists of Custom Objects in C#?

定制对象比较以区分列表

在处理包含自定义对象的两个泛型列表时,提取一个列表中(特别是不存在于另一个列表中)的唯一元素是一个有用的操作。

.Except() 方法为此提供了一个有效的解决方案。它接受两个列表参数,并返回一个新列表,其中包含在第一个列表中但在第二个列表中找不到的项。

重写相等性和默认比较

如果您的自定义对象类型重写了 Equals()GetHashCode() 方法,您可以按如下方式使用 .Except()

var list3 = list1.Except(list2).ToList();
登录后复制

在这种情况下,对象的比较依赖于其重写的方法。任何相等性差异都将反映在列表之间的区别中。

自定义相等性比较器

但是,如果您的相等性标准需要自定义实现,您可以定义自己的 IEqualityComparer<T>。这是一个使用 ID 作为比较基础的示例:

public class IdComparer : IEqualityComparer<customobject>
{
    // ... (实现如提供的答案中所示)
}
登录后复制

随后,您可以通过以下方式将此自定义比较器与 .Except() 一起使用:

var list3 = list1.Except(list2, new IdComparer()).ToList();
登录后复制

这种定制的比较将确保 .Except() 操作符合您的特定相等性要求。

保留重复项

值得注意的是,.Except() 将排除重复元素。如果需要保留重复项,另一种方法是将第二个列表转换为 HashSet 并使用以下方法:

var list3 = list1.Where(x => !set2.Contains(x)).ToList();
登录后复制

此方法将保留结果列表 list3 中的所有唯一元素,包括重复项。

以上是如何在 C# 中有效地查找两个自定义对象列表之间的不同元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板