[解決済み] Distinct() with lambda?
2022-03-22 02:11:05
質問
そう、私は列挙可能なものを持っていて、そこから個別の値を取得したいのです。
使用方法
System.Linq
という拡張メソッドがあります。
Distinct
. 単純なケースでは、パラメータなしで、次のように使うことができます。
var distinctValues = myStringList.Distinct();
しかし、オブジェクトの列挙があり、それに対して平等性を指定する必要がある場合、利用可能なオーバーロードはこれだけです。
var distinctValues = myCustomerList.Distinct(someEqualityComparer);
のインスタンスでなければなりません。
IEqualityComparer<T>
. もちろん、これはできるのですが、やや冗長で、まあ、不格好なものです。
私が期待するのは、ラムダを受け取るオーバーロード、例えば
Func<T, T, bool>
:
var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);
このような拡張機能があるか、または同等の回避策をご存知の方はいらっしゃいますか?あるいは、私が何かを見逃しているのでしょうか?
あるいは、(1)のように
IEqualityComparer
をインラインで表示できますか(恥ずかしい)?
更新情報
に対するAnders Hejlsbergの返答を発見しました。 ポスト この件に関して、MSDNフォーラムにて。彼はこう言っています。
あなたが遭遇する問題は、2つのオブジェクトを比較する際に は、同じ GetHashCode の戻り値でなければなりません(そうでなければ Distinct が内部で使用するハッシュ テーブルは正しく機能しません)。 IEqualityComparerを使用する理由は、互換性があるからです。 Equals と GetHashCode の実装を1つのインタフェースにまとめたものです。
なるほど、納得です。
解決方法は?
IEnumerable<Customer> filteredList = originalList
.GroupBy(customer => customer.CustomerId)
.Select(group => group.First());
関連
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] リスト内包とラムダ+フィルタの比較
-
[解決済み] クロージャ」と「ラムダ」の違いは何ですか?
-
[解決済み] ラムダ(関数)とは何ですか?
-
[解決済み] ラムダ式からプロパティ名を取得する
-
[解決済み] LINQとLambdaでJoin/Whereを実現する
-
[解決済み】C++11のラムダ式って何?
-
[解決済み】C#のラムダ式。なぜ私はそれらを使用する必要がありますか?
-
[解決済み】Java 8 Lambda関数が例外を投げる?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] テーブルの1つのフィールドのみに基づくLinqでのDistinct