問題タブ [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.
c# - Union に IEqualityComparer を使用する
2 つのリストから重複を削除し、それらを 1 つのリストに結合したいだけです。また、重複とは何かを定義できる必要があります。ColumnIndex プロパティで重複を定義します。同じであれば重複です。これが私が取ったアプローチです:
コード セグメントで 1 回だけ em が必要なランダムな機会にインライン比較子を記述する方法の気の利いた例を見つけました。
次に、2 つのリストを取得し、比較子を使用してそれらの結合を試みます。
ただし、結果セットは null です。
私はどこで迷うのですか?2 つのリストに同じ ColumnIndex プロパティを持つ列があることを確認済みです。
c# - 多くのオブジェクトを含む 2 つのリストを比較する (第 2 部)
私が以前に尋ねた質問を参照してください: 多くのオブジェクトを含む 2 つのリストを比較する
IEqualityComparer インターフェイスを実装することで、比較がいかに高速に行われるかを見るのは印象的です。
他の質問で述べたように、この比較は、ソース フォルダーを宛先フォルダーにバックアップするのに役立ちます。フォルダーに同期したいので、ファイルの日付を比較する必要があります。私が次のようなことをするときはいつでも:
以上の記号を使用して同様のことができればいいのですが。tick プロパティも使用してみましたが、機能しません。たぶん私は何か間違ったことをしています。このインターフェイスを実装する等号より小さいものを比較することはできないと思います。さらに、このクラスの仕組みがわかりません。リスト全体をどれだけ速く反復処理するかが印象的であることは知っています。
c# - 2つのリストで一致するアイテムを表示する
私は2つのリストを持っていると言わないでください
リスト1:
「トム」、「フランク」、「レイシー」
リスト2:
「フランク」、「トム」
トムとフランが繰り返されていることを示すために必要なクエリは何でしょうか?
私が比較しようとしているリストは非常に大きく、次のようなことをした場合:
これには長い時間がかかります。
linq - LinqUnion-IEqualityComparerと実行数
興味深いことに、IEqualityComparerの具体的な実装のGetHashCodeはどのように機能しますか?
私が尋ねる理由は、linqを使用して2つのコレクションを結合し、左側のコレクションのみにアイテムがある場合、GetHashCodeが2回呼び出されるためです。さらに、両方のコレクションに1つの行がある場合、4回呼び出されます。
これは大まかなタイピングですが、要点はわかります。GetHashCodeは2回呼び出されますが、listOneの1つのアイテムに対して2回呼び出されると思いますか?
例えば
ありがとう
c# - オブジェクト プロパティが複製されたときにオブジェクトのリストからアイテムを削除する
私はかなり linq と c# に慣れていないので、ばかげている場合は申し訳ありません。渡されたいくつかの変数に基づいて、製品情報、これらの製品の価格、およびこれらの製品のカテゴリのリストを返すクエリがあります。
これは問題なく機能しますが、たとえば、y の行に ID = 1 と Cat1 = Foo があり、別の行に ID = 1 と Cat1 = Bar があるとします。上記のクエリは明らかに両方を返します。このクエリを変更して、ID ごとに 1 行だけ戻す方法はありますか。
私はこれを約2時間グーグルで検索し、group by、.Distinct with an IEqualityComparer、および私が見つけた他の方法を試しましたが、成功しませんでした。私の理解は十分ではありません。助けていただければ幸いです。
c# - IEqualityComparerの使用方法
データベースに同じ番号のベルがいくつかあります。重複せずに全部手に入れたいです。この作業を行うために比較クラスを作成しましたが、関数を実行すると、0.6秒から3.2秒まで、明確に関数から大きな遅延が発生します。
私はそれを正しく行っていますか、それとも別の方法を使用する必要がありますか?
c# - IEqualityComparer を実装すると、等価性テストの結果が変更されますか?
IEqualityComparer<MyObject>
プライオリティ キューが要素を並べ替えることができるようにするために、 forを実装しましMyObject
た (使用はここでは実際にはインポートされませんが、何でも)。したがって、メソッドとメソッド
を実装しました。Equals
GetHashCode
私の質問は次のとおりです。私が行うときMyObject1 == MyObject2
、メソッドで私が書いたテストを使用しますEquals
か、それとも古典的な等値テストですか?
c# - カスタムIEqualityComparerを除くLinq
以下の例のように、2 つの一般的なリストの違いを見つけようとしています。t1 と t2 には同じプロパティが含まれていますが、同じオブジェクトではないため、IEqualityComparer を実装する必要があります。
これはこの例で機能しているように見えますが、実際のクラスには他のいくつかのプロパティがあり、他のいくつかのクラスでも同じことを行う必要があります。
それで、私は車輪を再発明しているのだろうかと思っていましたか?
2 つのオブジェクトのすべてのプロパティを比較する簡単な方法はありますか? 現時点では、単純な型を含むクラスだけに対処する必要がありますが、他のクラスのインスタンスを含むクラスで動作する比較器があればいいのにと思います。
c# - GetHashCodeを再実装するクラスから生のハッシュコードを取得するにはどうすればよいですか?
簡単な質問:object.GetHashCode()
再実装されたオブジェクトの値を取得するにはどうすればよいGetHashCode()
ですか?
長い話: つまり、私には約10万個のオブジェクトがあり、それぞれが多くの(コンパイル時以外の)共通の文字列を共有しています。値が等しい場合のように一般的で、同じインスタンスです。
それを知っていると、完全な文字列比較ではなく、標準のオブジェクト比較()を使用したいと思いますReferenceEquals
。特に、これらはかなり定期的に辞書で検索されるためです。
class ReferenceEqualityComparer : IEqualityComparer
だから私は、と一緒に使用することを宣言し、Dictionary<string, TValue>
とにかく持っていると便利だと考えて、2つのメソッドを実装しようとします。
Equalsは簡単です。を使用してobject.ReferenceEquals
ください。
しかし、どうすればメソッドと同等のものを取得できobject.GetHashCode()
ますGetHashCode
か?
つまり、オブジェクトのインスタンスの表現を取得するにはどうすればよいですか?
私はこれを行うことができる他の方法があることを知っています-への参照を保持するが、またはを実装しないクラスを作成するか、InternedString
各オブジェクトで文字列ではなくインデックスを格納しますが、私は今興味があります-実際にはありますかジェネリックを実装する方法は?string
Equals
GetHashCode
ReferenceEqualityComparer
c# - IEqualityComparer に GetHashCode を実装する理由
インターフェイスList
を使用して、C#から個別の項目を取得したい。IEqualityComparer
しかし、私は知りませんGetHashCode
。GetHashCode
とメソッドの両方を実装しEquals
ました。また、メソッドを呼び出しEquals
て、ユーザー定義のデータ型を持つリストから個別のアイテムを取得するにはどうすればよいですか。