問題タブ [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 投票する
4 に答える
78856 参照

c# - 個別の値を返すように IEqualityComparer を実装する方法は?

重複したオブジェクトを含むデータを返す L2E クエリがあります。これらの重複オブジェクトを削除する必要があります。基本的に、それらの ID が同じである場合、オブジェクトは重複していると想定する必要があります。を試しましq.Distinct()たが、それでも重複したオブジェクトが返されました。次に、独自の IEqualityComparer を実装してDistinct()メソッドに渡してみました。メソッドは次のテキストで失敗しました:

LINQ to Entities はメソッド 'System.Linq.IQueryable 1[DAL.MyDOClass] Distinct[MyDOClass](System.Linq.IQueryable1[DAL.MyDOClass], System.Collections.Generic.IEqualityComparer`1[DAL.MyDOClass])' メソッドを認識せず、このメソッドはストア式に変換できません。

EqualityComparer の実装は次のとおりです。

IEqualityComparerでは、自分自身を適切に書くにはどうすればよいでしょうか。

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

.net - 辞書のAccessTimeとは何ですか、リスト>、それはまだO(1)ですか?

Dictionary<Dictionary<char,int>, List<string>>辞書でアナグラムの単語を見つけるためのアルゴリズムを実装したかったのです。

この辞書のカスタムを実装する必要があるのでEqualityComparer、アクセス時間はまだO(1)、つまり大きなO(1)ですか?

2番目の質問、の一部として、EqualityComparer私も実装する必要がありGetHashCode()ます。GetHashCode()を決定する効率的な方法は何Dictionary<Dictionary<char,int>, List<string>>ですか?

私はこの方法を思いついたばかりですが、もっと良い方法はありますか?

アドバイスをいただければ幸いです。ありがとう!

0 投票する
5 に答える
30839 参照

c# - IEqualityComparerの違いは何ですかおよびIEquatable

IEqualityComparer<T>とを使用する必要があるシナリオを理解したいと思いIEquatable<T>ます。両方のMSDNドキュメントは非常によく似ています。

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

c# - IEqualityComparerとEqualityComparer?

私はこの投稿を読みましたが、それは私の質問に答えません。

MSDNによると

EqualityComparer(Of T)クラスは、Objectの代わりにIEquatable(Of T).Equalsメソッドを使用して同等性をテストするため、IEqualityComparer(Of T)インターフェイスを実装する代わりにEqualityComparer(Of T)クラスから派生することをお勧めします。等しい方法。

しかし、実装を見ると、どちらもジェネリック型を使用しています。

私は何が欠けていますか?

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

c# - IEqualityComparerおよびカスタムタイプ

カスタムタイプを2つ比較して、 /メソッドList<T>を使用しようとしています。同等性は、このタイプの3つのフィールドによって決定されます。同等性は、通常の条件よりも多くに基づいています(すべてのフィールドに同じデータが含まれています)。もちろん実装しました。私の問題は、hashCodeが同じでない場合、メソッドが等しくないことを返します。これは私の場合は当てはまらないため、これは役に立ちません。IntersectExceptIEqualityComparer<T>GetHashCode()

等式が複数の条件に基づいている場合に2つのカスタムオブジェクトを比較して、intersect / exception / distinctなどを使用できるようにする方法はありますか?

これが私のコードです:

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

c# - EqualityComparer。デフォルトの誤解?

私はクラスを持っていますPerson、それはからEquals()メソッドを実装しIEquatable<Person>ます(これもメソッドをオーバーライドしますObject.Equals、今のところGetHashcode()メソッドを無視しましょう)

じゃあ始めよう:

この行について話しましょう:

この部分を理解するのに問題があります:

EqualityComparer<Person>.Defaultクラスが実装されているかどうかをチェックすると聞きましたIEquatable-それはEquals(Person other)メソッドを取り、ではありませんEquals(object obj)ボクシングを回避できるという利点があります

ここに画像の説明を入力してください しかし

ありまたはなしでEquals(Person other)実行されます (IEquatableを実装しているため) EqualityComparer<Person>.Default

では、私たちはどのボクシングについて話しているのでしょうか?ありません!

Equals(object obj)実行されるのは次の場合のみ です。

しかし、私はプログラマーです!実際objectPerson

私は何が欠けていますか?ここでの利点を理解するのに苦労していますEqualityComparer<Object>.Default。誰かが私が間違っていることを証明するための例を教えてもらえますか?

0 投票する
5 に答える
5161 参照

c# - 2 つのリストを比較し、特定のプロパティを無視する

一意のレコードのみを取得したい 2 つの従業員リストがありますが、これにはひねりがあります。各リストには Employee クラスがあります。

一致を比較したい唯一のプロパティは、FirstName と LastName です。比較でIDを完全に無視したい。allFulltimeEmployees リストには 3 人の従業員が含まれ、allParttimeEmployees リストには 3 人の従業員が含まれています。リスト内の 2 つの項目 (Sally Jones と Fred Jackson) で名と姓が一致します。リストには、FirstName が同じで LastName が異なるため、一致しない項目が 1 つあります。

したがって、2 つのリストの比較中は、クラスの ID プロパティを無視したいと考えています。2 つのリストの Smith と Williams の姓が一致しないため、Joe Williams に不一致のフラグを立てたいと思います。

IEqualityComparer を使用してみましたが、パラメーターで IEnumerable リストではなく単一の Employee クラスを使用しているため、機能しません。

やりたいことをうまくやって、この操作を実行するにはどうすればよいですか? 助けてくれてありがとう!

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

linq - IEqualityComparerを使用して特定の値を確認する

したがって、IEqualityComparerを使用しようとしたのはこれが初めてであり、問​​題が発生しています。

コードが舞台裏で何をしているのか正確に理解していない可能性があります。

私が提供しているリストは次のようになります。

Distinct()を使用して、一意のSNを持つアイテムの数を見つけようとしていますが、「retest==1」です。

また、派生したIEqualityCompareクラスは次のようになります。

問題は、これが最初の2つの項目を含むを生成するように見えるのに対し、私が探しているのは、「retest==1」である単一の項目のみを含むリストであるということです。

私がここで間違っていることについて何か考えはありますか?'retest == 0'のレコードが返されるのはどうしてですか?

答え

条件がfalseの場合、オブジェクトは等しくないかのように扱われます。Distinctは等しくない行を返します。ところで、あなたはこのタイプのコードでIEqualityComparerの契約に違反しています。結果は実際には未定義です。– usr

「契約に違反している」とは、たとえば、retest==0のオブジェクトがそれ自体と等しくないことを比較することを意味します。– usr

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

asp.net-mvc-3 - DistinctリストをEF4.xDBSetコンテキストおよびIEqualityComparerで機能させるにはどうすればよいですか?

私は、Distinctを自分のコードで機能させるために何時間も努力してきました。

私はEF4.3、MVC3、Razorを使用しており、製品IDと名前までのリストを取得しようとしています。DBに対してSQLクエリを実行すると、問題ありません。

SQLクエリは

そのテーブルの他の唯一の列は国コードであるため、標準のdistinct()が機能していません。

IEqualityComparerの作成まで行ってきました

コードは次のとおりです。

これが私がそれを呼んだところです。

しかし、それがその最後の行に当たると、私はそれから次のようなエラーが発生します...

誰かが私が間違っていることを教えてもらえますか?

ありがとう、

デビッド

0 投票する
6 に答える
284 参照

c# - 多対多に一致する比較対象のハッシュコード関数を作成することは可能ですか?

次の比較ロジックのハッシュコード関数を記述できますか?

My(A、B、C)の少なくとも2つのプロパティが一致する場合、の2つのインスタンスは等しくなります。

Equalsの部分は単純ですが、ハッシュコードの部分に困惑していて、それが不可能かもしれないと思っている部分があります。

更新:Reed Copseyによる正解に加えて、ファジー比較の一般的な有用性に関する非常に重要な点がEthan Brownによって明確に述べられています。この質問/回答の根底にあるものを完全に理解するには、彼の回答も参照してください。