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 サイトの他の関連記事を参照してください。