首页 > 后端开发 > C++ > 如何使用 LINQ 合并两个 Person 对象列表并根据名称匹配处理属性更新?

如何使用 LINQ 合并两个 Person 对象列表并根据名称匹配处理属性更新?

Susan Sarandon
发布: 2024-12-26 19:04:13
原创
496 人浏览过

How to Merge Two Lists of Person Objects Using LINQ and Handle Attribute Updates Based on Name Matching?

使用 Linq 从两个对象列表创建列表

考虑以下场景:

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

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

目标是将两个列表组合成一个新的列表。如果合并的记录属于同一个人,则其属性应按如下方式对齐:名称应匹配,值应反映 list2 中的人员的值,更改应为 list2 中的值减去 list1 中的值。否则,更改应为 0。

解决方案:

Linq 方法 Union 非常适合此任务:

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

这个操作合并两个列表,删除重复项。默认情况下,它将调用 Person 类中定义的 Equals 和 GetHashCode 方法。但是,如果不重写这些方法,它们可能无法有效地比较我们的自定义对象(例如,使用 Name 属性进行比较)。

重写 Equals 和 GetHashCode:

为了确保按名称进行准确比较,请将方法重写为如下:

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

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

public bool Equals(Person personToCompareTo)
{
    if (personToCompareTo == null || string.IsNullOrEmpty(personToCompareTo.Name))
        return false;

    return Name.Equals(personToCompareTo.Name);
}
登录后复制

自定义比较器:

或者,创建一个实现 IEqualityComparer 接口的自定义比较器。该比较器可以作为 Union 方法的第二个参数提供。有关自定义比较器的更多信息,请访问:http://msdn.microsoft.com/en-us/library/system.collections.iequalitycomparer.aspx。

以上是如何使用 LINQ 合并两个 Person 对象列表并根据名称匹配处理属性更新?的详细内容。更多信息请关注PHP中文网其他相关文章!

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