ホームページ > バックエンド開発 > C++ > ラムダ式は、カスタム等価比較のための LINQ の独自のメソッドを簡素化できますか?

ラムダ式は、カスタム等価比較のための LINQ の独自のメソッドを簡素化できますか?

Patricia Arquette
リリース: 2025-01-25 22:46:13
オリジナル
736 人が閲覧しました

Can Lambda Expressions Simplify LINQ's Distinct Method for Custom Equality Comparisons?

linqのラムダスと合理化されている:希望に満ちた考え方?Distinct ​​linqの

メソッドは、列挙品を操作するための定番です。 ただし、異なる操作のカスタム平等比較を定義するには、

を使用する必要があることがよくあります。 この仮説的な例のように、ラムダベースの過負荷は非常に簡潔になります。 Distinct IEqualityComparer

ラムダベースの実用的な代替手段var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);このようなラムダのみの過負荷は.NETフレームワークには存在しませんが、いくつかの代替案が同じ結果を達成します。

1。 Distinctおよびアプローチ:

このアプローチは、キー(例えば、

)に基づいてグループ要素をグループ化する

を使用して、各グループから最初の要素を選択します。 これにより、重複が効果的に除去されます GroupBySelect2。実装

GroupByCustomerIdを実装するカスタムクラスを作成すると、より堅牢でタイプセーフソリューションが提供されます。 これにより、特定の基準に基づいて、明確に定義された平等とハッシュコードロジックが可能になります。 これは一般に、保守性とパフォーマンスのための好ましい方法です。

<code class="language-csharp">IEnumerable<Customer> distinctCustomers = originalList
    .GroupBy(customer => customer.CustomerId)
    .Select(group => group.First());</code>
ログイン後にコピー
3。 (強く落胆している)反射ベースの比較:

IEqualityComparer<T>反射を使用してプロパティに基づいてオブジェクトを比較することは、非常に非効率的でエラーが発生しやすいです。 絶対に必要でない限り、このアプローチを避けてください

ラムダのみの過負荷がないことの根本的な理由:

IEqualityComparer<T> Anders Hejlsbergが指摘しているように、Lambdaだけでは

操作には不十分です。 一貫した動作の場合、比較によって等しいとみなされるオブジェクトも同じハッシュコードを生成する必要があります。

以上がラムダ式は、カスタム等価比較のための LINQ の独自のメソッドを簡素化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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