ホームページ > バックエンド開発 > C++ > LINQ を使用して人物オブジェクトの 2 つのリストをマージし、名前の一致に基づいて属性の更新を処理する方法

LINQ を使用して人物オブジェクトの 2 つのリストをマージし、名前の一致に基づいて属性の更新を処理する方法

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 を使用して 2 つのオブジェクト リストからリストを作成する

次のシナリオを考えてみましょう。

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

List<Person> list1;
List<Person> list2;
ログイン後にコピー

目的は次のとおりです。 2 つのリストを新しい List に結合します。結合されたレコードが同じ人物に関係する場合、その属性は次のように整列する必要があります。名前は一致する必要があり、値はリスト 2 の人物の値を反映し、変更はリスト 2 の値からリスト 1 の値を引いた値になる必要があります。それ以外の場合、変更は 0 である必要があります。

解決策:

Linq メソッド Union はこのタスクに最適です:

var mergedList = list1.Union(list2).ToList();
ログイン後にコピー

Thisこの操作により 2 つのリストがマージされ、重複が削除されます。デフォルトでは、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 メソッドの 2 番目の引数として提供できます。カスタム比較子の詳細については、http://msdn.microsoft.com/en-us/library/system.collections.iequalitycomparer.aspx.

を参照してください。

以上がLINQ を使用して人物オブジェクトの 2 つのリストをマージし、名前の一致に基づいて属性の更新を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート