首页 > 后端开发 > C++ > 如何使用 LINQ 合并两个 Person 对象列表,通过组合值和计算变化来处理重复项?

如何使用 LINQ 合并两个 Person 对象列表,通过组合值和计算变化来处理重复项?

Mary-Kate Olsen
发布: 2025-01-01 06:54:11
原创
620 人浏览过

How Can I Merge Two Lists of Person Objects Using LINQ, Handling Duplicates by Combining Values and Calculating Change?

使用 LINQ 合并两个对象列表

在管理数据等场景中,您可能会遇到需要组合多个对象列表的情况。让我们考虑一个特定的实例,其中有两个 Person 对象列表:

<br>class Person<br>{<pre class="brush:php;toolbar:false">string Name;
int Value;
int Change;
登录后复制

}

List< ;人> list1;
列表; list2;

我们的目标是将这两个列表合并为一个新的 List。当两个列表中存在同一个人时,我们需要将他们的值合并起来,同时通过从列表2中的值减去列表1中的值来计算变化。对于非重复人员,更改应该为零。

使用 Linq Union 方法

合并这些列表的一种简单方法是使用 Linq 扩展方法 Union 。此方法组合两个序列的元素并返回一个新序列。例如:

<br>var mergedList = list1.Union(list2).ToList();<br>

默认情况下,Union 方法使用 Person 类的 Equals 和 GetHashCode 方法来确定重复元素。但是,如果您想根据特定属性(例如姓名)比较人员,您可以重写 Person 类中的这些方法。

/// <summary>
/// Checks if the provided object is equal to the current Person
/// </summary>
/// <param name="obj">Object to compare to the current Person</param>
/// <returns>True if equal, false if not</returns>
public override bool Equals(object obj)
{
    // Try to cast the object to compare to to be a Person
    var person = obj as Person;

    return Equals(person);
}

/// <summary>
/// Returns an identifier for this instance
/// </summary>
public override int GetHashCode()
{
    return Name.GetHashCode();
}

/// <summary>
/// Checks if the provided Person is equal to the current Person
/// </summary>
/// <param name="personToCompareTo">Person to compare to the current person</param>
/// <returns>True if equal, false if not</returns>
public bool Equals(Person personToCompareTo)
{
    // Check if person is being compared to a non person. In that case always return false.
    if (personToCompareTo == null) return false;

    // If the person to compare to does not have a Name assigned yet, we can't define if it's the same. Return false.
    if (string.IsNullOrEmpty(personToCompareTo.Name) return false;

    // Check if both person objects contain the same Name. In that case they're assumed equal.
    return Name.Equals(personToCompareTo.Name);
}
登录后复制

或者,您可以创建一个实现 IEqualityComparer 的比较器类界面来定义您自己的比较标准。然后,您可以将此比较器指定为 Union 方法中的第二个参数。

以上是如何使用 LINQ 合并两个 Person 对象列表,通过组合值和计算变化来处理重复项?的详细内容。更多信息请关注PHP中文网其他相关文章!

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