ラムダ式を使用した .NET の一意の値の効率的な識別
コレクションから固有の要素を抽出することは、プログラミングで頻繁に必要となる作業です。 .NET の LINQ ライブラリでは、このための Distinct()
メソッドが提供されていますが、特定の等価比較を必要とするカスタム オブジェクトを処理する場合、その制限が明らかになります。 Distinct()
は IEqualityComparer
を受け入れますが、この比較にラムダ式を直接使用することはネイティブにサポートされていません。
IEqualityComparer
1 つの解決策には、IEqualityComparer
インラインを作成することが含まれます。
<code class="language-csharp">var distinctValues = myCustomerList.Distinct( EqualityComparer<Customer>.Create((c1, c2) => c1.CustomerId == c2.CustomerId) );</code>
この方法は機能しますが、やや面倒に感じるかもしれません。
代替案: GroupBy
と Select
より洗練された代替案は、明示的な IEqualityComparer
の必要性を回避します。 このアプローチでは、GroupBy
と Select
を利用します:
<code class="language-csharp">IEnumerable<Customer> filteredList = originalList .GroupBy(customer => customer.CustomerId) .Select(group => group.First());</code>
これは、指定されたキー (この場合は CustomerId
) に基づいて要素をグループ化し、各グループから最初の項目を選択して、重複を効果的に除外します。 これにより、ラムダ式を使用して個別の値を取得するための、よりクリーンで読みやすいソリューションが提供されます。
以上がラムダ式を使用して .NET で個別の値を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。