ホームページ > バックエンド開発 > C++ > C#でlambda式を使用して異なるリストを効率的に作成するにはどうすればよいですか?

C#でlambda式を使用して異なるリストを効率的に作成するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-25 22:51:10
オリジナル
223 人が閲覧しました

How Can I Efficiently Create a Distinct List Using Lambda Expressions in C#?

ラムダ式を使用して Distinct() メソッドをカスタマイズします

列挙可能なオブジェクトを扱う場合、多くの場合、一意の値を区別する必要があります。 System.Linq 名前空間は Distinct() 拡張メソッドを提供しますが、オブジェクトの等価性を指定するための Lambda 式を受け入れるオーバーロードがありません。

問題

ラムダ式に基づくオーバーロードがないため、プログラマは IEqualityComparer インターフェイスのみを使用できます。これには Equals() メソッドと GetHashCode() メソッドを実装する必要があります。このアプローチは退屈で面倒な場合があります。

ラムダ式ベースの回避策

必要な Lambda 構文に一致する既存の拡張メソッドはありませんが、創造的な回避策で同様の効果を達成できます。 GroupBy() と Select() を使用すると、列挙可能なオブジェクトを変換できます:

<code class="language-csharp">IEnumerable<customer> filteredList = originalList
  .GroupBy(customer => customer.CustomerId)
  .Select(group => group.First());</code>
ログイン後にコピー

指定したキーで要素をグループ化し、各グループから最初の要素を選択することで、GroupBy() で提供される Lambda 式に基づいて一意のリストを効果的に作成できます。

ラムダ式に基づく等価問題

ラムダ式ベースの等価比較器は、特定の型 (文字列など) に対して予期しない動作を引き起こす可能性があることに注意することが重要です。固有の操作を確実に実行するには、GetHashCode() の正確で一貫性のある実装を保証する必要があります。

さらに詳しい情報

.NET チーフ アーキテクトの Anders Hejlsberg が、ラムダ式ベースの Distinct() オーバーロードの制限について説明します。その理由は、Distinct() 内のハッシュ テーブルが互換性を適切に機能させるには、Equals() と GetHashCode() の間にギャップが必要であるためです。

以上がC#でlambda式を使用して異なるリストを効率的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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