ホームページ >バックエンド開発 >C++ >LINQ を使用して 2 つの person オブジェクトのリストをマージし、値を結合して変更を計算することで重複を処理するにはどうすればよいですか?

LINQ を使用して 2 つの person オブジェクトのリストをマージし、値を結合して変更を計算することで重複を処理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-01 06:54:11620ブラウズ

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

LINQ を使用した 2 つのオブジェクト リストの結合

データ管理などのシナリオでは、複数のオブジェクト リストを結合する必要がある状況が発生することがあります。 Person オブジェクトの 2 つのリストがある特定のインスタンスを考えてみましょう:

<br>class Person<br>{</p>
<pre class="brush:php;toolbar:false">string Name;
int Value;
int Change;

}

List< ;人> list1;
リスト<人> list2;

私たちの目標は、これら 2 つのリストを新しい List にマージすることです。両方のリストに同じ人物が存在する場合は、リスト 2 の値からリスト 1 の値を減算して変化を計算する際に、それらの値を結合する必要があります。重複していない人の場合、変更はゼロになるはずです。

Linq Union メソッドの使用

これらのリストをマージする簡単な方法の 1 つは、Linq 拡張メソッド Union を使用することです。 。このメソッドは 2 つのシーケンスの要素を結合し、新しいシーケンスを返します。例:

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

デフォルトでは、Union メソッドPerson クラスの Equals メソッドと GetHashCode メソッドを使用して、重複する要素を特定します。ただし、Name などの特定のプロパティに基づいて人を比較する場合は、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 メソッドの 2 番目のパラメーターとして指定できます。

以上がLINQ を使用して 2 つの person オブジェクトのリストをマージし、値を結合して変更を計算することで重複を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。