LINQ を使用してリスト内の固有の要素を決定する
1 つのリストにのみ存在し、他のリストには存在しない要素を識別する必要があります。 LINQ は、この課題に対する優れた解決策を提供します。
次のコード スニペットを考えてみましょう:
<code class="language-csharp">class Program { static void Main(string[] args) { // 初始化两个Person对象列表。 List<Person> peopleList1 = new List<Person>(); peopleList1.Add(new Person() { ID = 1 }); peopleList1.Add(new Person() { ID = 2 }); peopleList1.Add(new Person() { ID = 3 }); List<Person> peopleList2 = new List<Person>(); peopleList2.Add(new Person() { ID = 1 }); peopleList2.Add(new Person() { ID = 2 }); peopleList2.Add(new Person() { ID = 3 }); peopleList2.Add(new Person() { ID = 4 }); peopleList2.Add(new Person() { ID = 5 }); } } class Person { public int ID { get; set; } }</code>
peopleList2 内のどの人物が peopleList1 に存在しないかを判断したいとします。これを行うには、LINQ の Where() メソッドを利用できます。
1 つの方法は、Any() メソッドを使用することです。
<code class="language-csharp">var result = peopleList2.Where(p => !peopleList1.Any(p2 => p2.ID == p.ID));</code>
このクエリは、peopleList2 内の各個人をチェックして、peopleList1 に同じ ID を持つ人がいるかどうかを確認します。一致するものがなかった場合、その人は結果に含まれます。
または、同じロジックをより簡潔に表現する方法は次のとおりです:
<code class="language-csharp">var result = peopleList2.Where(p => peopleList1.All(p2 => p2.ID != p.ID));</code>
この場合、All() は peopleList1 内のすべての人の ID が peopleList2 内の現在の人の ID と異なるかどうかをチェックします。この条件が true の場合、その人は結果に含まれます。
注: どちらのメソッドも O(n*m) 操作を実行するため、大規模なデータセットではパフォーマンスの問題が発生する可能性があることに注意することが重要です。パフォーマンスを最適化するには、追加の方法が必要になる場合があります。提供されている LINQ 構文は、問題に対する簡単な解決策を提供しますが、プロジェクトのパフォーマンス要件に基づいて評価することを常にお勧めします。
以上がLINQ は、複数のリストの中から 1 つのリストに固有の要素を効率的に識別するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。