問題タブ [iequalitycomparer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
870 参照

.net - IEqualityComparerアイテムが等しくない場合、GetHashCodeは同じ値を返しますか?

インターフェイスのGetHashCodeメソッドに関するドキュメントの「実装者への注意事項」セクションには、次のように記載されています。IEqualityComparer<T>

Equals メソッドが 2 つのオブジェクト x と y に対して true を返す場合、x の GetHashCode メソッドによって返される値が y に対して返される値と等しくなければならないことを保証する実装が必要です。

T2 つの項目が等しい場合に、 の2 つのインスタンスが同じハッシュ コードを返すようにする理由はよく知られています。それらが異なるということは、それらが等しくないことを意味しますが、それらが同じであることは、それらが潜在的に等しいことを意味します。

2 つのインスタンスが等しくない場合 (それらの値がそうであることを示唆している場合でも) 、戻り値の引用符は未定義であると解釈します。

以下を例にとります。null 以外のそれぞれがクラスの属性を表す統計的分類int?に使用したいシーケンスがあります (列挙値を考えてください)。これらの値が null の場合、トレーニング セットが欠損値に偏ってしまうため、値が等しいと見なされることは望ましくありません。どちらかといえば、この場合、他の null 値と比較して false を返す null 値が必要です。int?

問題は、GetHashCodeメソッドで null が指定された場合、おそらく 0 (または他の数値、おそらく ) を返したいことですInt32.MinValueIEqualityComparer<T>さて、この実装を使用して何かにキーを付けると、ディクショナリ内のキーの存在をチェックするパフォーマンスが最適化されないことがわかりました。

つまり、GetHashCodeが呼び出されたときに他の値と競合することがわかっている値を返すことは有効ですか? への呼び出しEqualsが false を返す場合は? 上記の引用はこの問題では定義されていないため、私はイエスに傾いています。

0 投票する
2 に答える
2849 参照

.net - IEqualityComparer、IEqualityComparerが必要な理由インターフェース?

'Equal'メソッドと'GetHashcode'メソッドはオブジェクトクラスに存在し、このタイプはオブジェクト基本クラスを継承します。オブジェクトの2つのメソッドを直接実装することと、IComparerインターフェイスを使用することの違いは何ですか?

オブジェクトのEqualとGetHashCodeをオーバーライドし、ハッシュテーブルにプッシュすると、オーバーライドのequalメソッドが使用されますか?

IEqualityComparerコンストラクターを使用した新しいハッシュテーブルの違いは何ですか?

0 投票する
1 に答える
519 参照

c# - ジェネリック Dictionary で既定以外の Comparer を保持するために WCF シリアル化を取得するにはどうすればよいですか?

Visual Studio 2010 で最初から開始し、「WCF サービス アプリケーション」を追加するとします。このメソッドと実装を追加します。

次に、新しい「コンソール アプリケーション」を同じソリューションに追加し、(すべての既定の設定を使用して) サービス プロジェクトにサービス参照を追加し、このコードを に追加しますMain

大文字と小文字を区別しない辞書はkeyandKEYを同じキーと見なし、2 番目の をスローするため、このコードは失敗することが予想されAddます。

残念ながら、すべてがコンパイルされて実行されると、残念な顔:(になります。これDictionaryは、WCF レイヤーに到達すると、特定の非デフォルトで作成されたことを「忘れ」、Comparer代わりにstringデフォルトの等値比較子を取得するためです。

ワイヤを通過するときにのComparerプロパティが保持されるように変更する簡単な設定はありますか? Dictionaryまたは、カスタム クラスを作成する必要がありますか?

(カスタム IEqualityComparer を使用した Dictionary の XML シリアル化を見たことがありますが、あまり啓発されませんでした。3 年前のこの codeproject コメントも見ましたが、これは私の質問であり、回答ではありません)

0 投票する
2 に答える
141 参照

linq - 比較デリゲート (または同様のもの) を受け入れる Distinct() のオーバーロードがないのはなぜですか?

クエリ演算子 Distinct() を使用する場合、クエリ対象のシーケンスの型は、GetHashCode() と Equals() の適切なオーバーロードを提供するか、IEqualityComparer<T> の実装を渡す必要があります。

私の質問: Delegate インスタンス (例: Comparison<T>) を受け入れる Distinct() のオーバーロードがないのはなぜですか? - 存在する場合は、より軽量なラムダ式を渡すことができます (IEqualityComparer<T> の実装よりも軽量です)。- ここで何か不足していますか?

0 投票する
2 に答える
1492 参照

c# - How to get a value from a generic dictionary using a custom comparer for the key?

I have a generic dictionary of objects and want to use a custom comparer to update the value in the dictionary.

myObjects contains a dictionary of objects and the value is the number of times that object exists. Note that the value may be incremented numerous times using different comparators or removed altogether.

testObject is my custom object.

customComparer is a dynamically changing comparer based on the type of testObject. but all comparers are of the type IEqualityComparer<MyObject>

I can use Keys.Contains to determine if the object exists with custom comparer but then i'm not sure how to update the value?

0 投票する
2 に答える
419 参照

.net - EqualityComparer.Default.Equals()は間違った結果を返しますか?

.NET Frameworkのバグである以外に、これについての説明はありますか?メソッドは、次のEqualityComparer<Uri>.Default.Equals()URLが等しいと言っています!

http://books.google.com/books?id=B84KAQAAIAAJ&pg=PA29&lpg=PA29&dq=fletcher+sandford+tilton&source=bl&ots=ou8eF5REOG&sig=74fzA11Z8AENBtyCUcXEsXV06jQ&hl=en&ei=2rHTS9LaN4 fletchers _

http://books.google.com/books?id=B84KAQAAIAAJ&pg=PA29&lpg=PA29&dq=fletcher+sandford+tilton&source=bl&ots=ou8eF5REOG&sig=74fzA11Z8AENBtyCUcXEsXV06jQ&hl=en&ei=2rHTS9LaN4フレッチャー

最初のスペースの最後に「s」が続くスペースに注意してください。

0 投票する
2 に答える
885 参照

c# - 異なる照会可能なリストを作成する

区別する必要があるオブジェクトのリスト、GroupStudentStatus があります。これを行うために、以下のクラスを作成しました。
関連する 2 つの属性は、GroupStudentStatus.IsLastActionRemoved (DateTime) と GroupStudentStatus.Student.Guid です。

テスト方法がわからないことを除けば、これは正しいと思います。

私はこれをやろうとしていました:

0 投票する
3 に答える
467 参照

c# - IEqualityComparerに関する質問/リスト。明確()

これは、エンティティを含むリストから個別のアイテムセットが必要だったため、先ほど作成した等式比較ツールです。

  1. なぜではDistinctなく、比較者が必要なのFunc<T,T,bool>ですか?
  2. (A)と(B)は最適化以外のものであり、参照の比較が微妙であるために、期待どおりに機能しないシナリオはありますか?
  3. 必要に応じて、(C)を次のように置き換えることはできますか

    return GetHashCode(x) == GetHashCode(y)

0 投票する
2 に答える
6834 参照

c# - 2 つのカスタム オブジェクトの比較 (IEqualityComparer を使用)

まず、比較したいことを言います: My Custom Object (Item) has List of strings taxids. あるリスト内のすべての文字列が別の文字列リストに含まれているかどうかを確認したい (taxids別のオブジェクト (アイテム) の別のリストにもなる)。

だから、これはクラスです:

次に、これらはダミーのカスタム オブジェクトです。

ここでは、カスタムの comparer を使用しますItemComparer。このコードは次のとおりです。

問題は、変数bothが taxid フィールドに何もないことです。通常、「5」「1」のリストが必要です。

比較するときに hashCode が同じでなければならないことはわかっています。しかしtaxids、同じになることはありません。別の文字列リストで文字列を探すからです。

誰でもこの問題についてさらに助けてもらえますか?

(また、小さな質問: => のようなすべてのものに対して常に同じハッシュコードを返す場合、"a".GetHashCode()これは機能するかどうか?

前もって感謝します