首页 > 后端开发 > C++ > 如何使用 LINQ 在 C# 中合并两个对象列表、处理重复项和自定义比较?

如何使用 LINQ 在 C# 中合并两个对象列表、处理重复项和自定义比较?

Patricia Arquette
发布: 2025-01-01 10:24:11
原创
1011 人浏览过

How Can I Merge Two Lists of Objects in C# Using LINQ, Handling Duplicates and Custom Comparisons?

使用 Linq 合并对象列表

可以使用 LINQ 扩展方法将两个列表组合成具有特定条件的新列表。让我们考虑以下场景:

class Person
{
    string Name;
    int Value;
    int Change;
}

List<Person> list1;
List<Person> list2;
登录后复制

我们想要创建一个新的 List组合了 list1 和 list2。对于相同的人,组合记录应保留他们的姓名,使用 list2 中的值,并计算 Change 作为两个列表中值之间的差异。

使用并集方法

LINQ 中的 Union 方法提供了一种合并两个列表并删除重复项的简单方法。例如:

var mergedList = list1.Union(list2).ToList();
登录后复制

这将创建一个结合了 list1 和 list2 的新 mergedList,并且任何重复的项目都将被排除。

Equals 和 GetHashCode 的自定义比较

如果默认基于Equals和GetHashCode的对象比较不能满足我们的要求,我们需要重写Person类中的这些方法。例如,以下是如何使 Name 属性的比较不区分大小写:

public override bool Equals(object obj)
{        
    var person = obj as Person;

    return Equals(person);
}

public override int GetHashCode()
{
    return Name.ToLower().GetHashCode();
}

public bool Equals(Person personToCompareTo)
{
    return Name.ToLower() == personToCompareTo.Name.ToLower();
}
登录后复制

使用自定义比较器

或者,我们可以定义一个自定义比较器实现 IEqualityComparer 接口的类。然后,我们可以将此比较器作为第二个参数提供给 Union 方法:

var comparer = new PersonComparer();
var mergedList = list1.Union(list2, comparer).ToList();
登录后复制

有关自定义比较器的更多信息,请参阅 MSDN 文档。

以上是如何使用 LINQ 在 C# 中合并两个对象列表、处理重复项和自定义比较?的详细内容。更多信息请关注PHP中文网其他相关文章!

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