ホームページ > バックエンド開発 > C++ > LINQ を使用して C# でオブジェクトの 2 つのリストをマージし、重複とカスタム比較を処理するにはどうすればよいですか?

LINQ を使用して C# でオブジェクトの 2 つのリストをマージし、重複とカスタム比較を処理するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-01 10:24:11
オリジナル
1004 人が閲覧しました

How Can I Merge Two Lists of Objects in C# Using LINQ, Handling Duplicates and Custom Comparisons?

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

特定の条件を持つ 2 つのリストを新しいリストに結合することは、LINQ 拡張メソッドを使用して実現できます。次のシナリオを考えてみましょう。

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

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

新しいリスト<人> を作成したいと考えています。 list1 と list2 を組み合わせたものです。同一人物の場合、結合されたレコードはその名前を保持し、list2 の値を使用し、両方のリストの値の差として Change を計算する必要があります。

Union メソッドの使用

LINQ の Union メソッドを使用すると、2 つのリストをマージして重複を削除する簡単な方法が提供されます。例:

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 インターフェイスを実装するクラス。次に、この比較子を 2 番目のパラメーターとして Union メソッドに提供できます。

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

カスタム比較子の詳細については、MSDN ドキュメントを参照してください。

以上がLINQ を使用して C# でオブジェクトの 2 つのリストをマージし、重複とカスタム比較を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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