[解決済み] IEqualityComparerでデリゲートをラップする
2022-07-11 10:28:13
質問
いくつかのLinq.Enumerable関数は、Linq.Enumerableを使用するために
IEqualityComparer<T>
. を適応させる便利なラッパークラスはありますか?
delegate(T,T)=>bool
を実装するために
IEqualityComparer<T>
? 正しいハッシュコードの定義の問題を無視すれば)書くのは十分簡単ですが、すぐに使えるソリューションがあるかどうか知りたいのです。
具体的には、私はセット操作を
Dictionary
に対してセット操作を行い、メンバーシップを定義するためにキーのみを使用したいのです(異なるルールに従って値を保持しながら)。
どのように解決するのですか?
通常であれば、回答に@Samとコメントすることで解決します(元の投稿に編集を加えて、動作を変えずに少しすっきりさせました。)。
以下は、私のリフである @Sam さんの回答 に、デフォルトのハッシュ化ポリシーに対する[IMSHO]重要な修正を加えました。
class FuncEqualityComparer<T> : IEqualityComparer<T>
{
readonly Func<T, T, bool> _comparer;
readonly Func<T, int> _hash;
public FuncEqualityComparer( Func<T, T, bool> comparer )
: this( comparer, t => 0 ) // NB Cannot assume anything about how e.g., t.GetHashCode() interacts with the comparer's behavior
{
}
public FuncEqualityComparer( Func<T, T, bool> comparer, Func<T, int> hash )
{
_comparer = comparer;
_hash = hash;
}
public bool Equals( T x, T y )
{
return _comparer( x, y );
}
public int GetHashCode( T obj )
{
return _hash( obj );
}
}
関連
-
[解決済み] Marginのプロパティ順
-
[解決済み] BasicHttpsBindingとWsHttpBinding with Transport securityの違いは何ですか?
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] CryptographicException「キーセットが存在しない」、ただしWCF経由に限る
-
[解決済み] app.configが作成されるタイミングとapp.exe.configが作成されるタイミング、その違いとは?
-
[解決済み] 戻り値のないFuncデリゲート
-
[解決済み] Visual Studioの「Any CPU」ターゲットはどういう意味ですか?
-
[解決済み] .NETで文字列から発音区分符号(アクセント)を削除するにはどうすればよいですか?
-
[解決済み] delegateキーワードとlambda記法の比較
-
[解決済み] C++のデリゲートとは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] .net 4.5アップグレード後、System.Web.Httpが見つからない
-
[解決済み] 16進数値0x00は無効な文字です。
-
[解決済み] C++/CLIにおけるキャレット('^')の意味は?
-
[解決済み] 権限 '*' を持つ SSL/TLS の安全なチャネルを確立できませんでした。
-
[解決済み] Powershell v3 Invoke-WebRequest HTTPSエラー
-
[解決済み] AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersionの違いは何ですか?
-
[解決済み] Distinct() with lambda?
-
[解決済み] System.Timers.Timer vs System.Threading.Timer
-
[解決済み] .NETで文字列から発音区分符号(アクセント)を削除するにはどうすればよいですか?
-
[解決済み] .NETのIEqualityComparer<T>のGetHashCodeの役割は何ですか?