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

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

Patricia Arquette
Patricia Arquette原创
2025-01-01 10:24:111025浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn