問題タブ [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# - C#3.0:リストから重複を返す必要があります<>
C#にオブジェクトのList <>があり、リスト内で重複していると見なされるオブジェクトを返す方法が必要です。Distinct結果セットは必要ありません。リポジトリから削除するアイテムのリストが必要です。
この例のために、「車」タイプのリストがあり、これらの車のどれがリスト内の別の車と同じ色であるかを知る必要があるとします。リスト内の車とその色のプロパティは次のとおりです。
この例では、結果(IEnumerable <>、List <>など)にCar4とCar5を含める必要があります。これは、リポジトリまたはデータベースからこれらを削除して、リポジトリに色ごとに1台の車しか持たないようにするためです。どんな助けでもいただければ幸いです。
vb.net - IEqualityComparerをどのように実装しますかVB.NETで?
ディレクトリをループして、指定されたフォルダとファイルをチェックする次の関数があります。
この方法を実行した理由は、各リストの項目と渡されたファイル/フォルダーがすべて小文字であることを確認できるようにするためです。そうでない場合は、次のようにします。
私の同僚は、比較器を使用してケースを無視できることについて、以前に私に何かを述べました。拡張機能は.Contains
、値とともに比較引数を持つことができます。私はグーグルとMSDNでいくつかの検索を行い、次の比較器を思いついた:
行にtheCompare(x.name, y.name) = 0
到達すると、エラーが発生します。これはエラーメッセージです。
At least one object must implement IComparable.
このエラーの意味と修正方法を知っている人はいますか?
.net - IEnumerable.Contains と一緒に使用した場合の IEqualityComparer.Equals は、リスト内の値が x または y ですか?
IEnumberable には、2 つのパラメーターを受け取る拡張メソッド Contains<T> があります。最初のパラメータはチェックする値で、2 番目のパラメータは IEqualityComparer の実装です。IEqualityComparer.Equals を見ると、1 番目と 2 番目のオブジェクトを比較するために、x と y という名前の 2 つのパラメーターが必要です。
私の質問は、X または Y が IEnumerable の値ですか?
例
最初の値の Equals メソッドを呼び出すと、Equals("a","d") または Equals("d","a") になりますか?
c# - ラムダで定義されたカスタム IEqualityCompare を持つ HashSet コンストラクター?
現在、HashSet<T>
等値比較を自分で定義できるコンストラクターはHashSet<T>(IEqualityComparer<T> comparer)
コンストラクターです。この EqualityComparer をラムダとして定義したいと思います。
ラムダを介して比較子を生成できるクラスを作成した このブログ投稿を見つけ、Extended() などの拡張メソッドを使用してこのクラスの構築を非表示にしています。
今、同じことをしたいのですが、コンストラクターを使用します。拡張メソッドを介してコンストラクターを作成することは可能ですか? または、どういうわけか作成できる別の方法はありHashSet<T>(Func<T,T,int> comparer)
ますか?
--UPDATE--
明確にするために、これは私が達成しようとしているもののフリーハンド バージョン (のスニペット) です。
またはより理想的に
vb.net - カスタム Generic.IEqualityComparer(Of T) - コンパイラ エラー
LINQ コレクションで使用する単純な IEqulityComparer を実装しようとしています。私は次のコードを作成しましたが、これは議論のために最も単純な形式に縮小されています...
私が抱えている問題は、両方の関数がコンパイラ警告をスローすることです「関数 'getHashCode' (または 'Equals') は、基本クラス 'Object' のオーバーライド可能なメソッドをシャドウします。基本クラスのメソッドをオーバーライドするには、このメソッドを 'Overrides と宣言する必要があります。 '."
ただし、それらをオーバーライドとして宣言すると、「関数 'GetHashCode' は基本クラスの関数をオーバーライドしないため、オーバーライドとして宣言できません。」というエラーが表示されます。
また、「Implements」行で「getHashCode」を実装する必要があるというコンパイラ エラーが発生していますが、これは最初の問題の結果であると推測しています。
私のすべての調査は、私が大丈夫であることを示しています - 誰か手がかりを教えてください?
vb.net - LINQ カスタム比較を使用する場合を除く
IEqualityComparer が結果セットの単一フィールドの値に基づいて特定の結果を除外する場合、カスタム実装を使用して LINQ 結果セットで "Except" メソッドを使用しようとしています。
だから、単純化された形で私は...
私の比較者は次のとおりです...
".Except" 行で無効なキャスト例外が発生し、"型 '...insCompare' のオブジェクトを型 'System.Collections.Generic.IEqualityComparer' にキャストできません" というメッセージが表示されます。
なぜこれが喜ばれるのか、誰でも光を当てることができますか.
linq - 匿名タイプのIEqualityComparer
私はこれを持っています
許可されている場合はこれを行いたい
一般的なLambdaComparerを使用してみましたが、匿名タイプを使用しているため、関連付けられるタイプはありません。
「オビ=ワン・ケノービを助けてください、あなたは私の唯一の希望です」
generics - リストでオブジェクトのプロパティを見つける方法はありますか?含むを使用しますか?
リストにオブジェクトがすでに存在するかどうかを確認するにはどうすればよいか迷っていました。リストに「newPerson」(Personクラスのインスタンス)を追加していますが、リストにnewPersonのコンテンツ/プロパティが存在するかどうかを確認しています。
この部分はうまく機能します:
まず、上記の醜いコードを単純化/最適化したいと思いました。そこで、Containsメソッドを使用することを考えました。
上記の2番目のコードは機能しません。オブジェクトのコンテンツ/プロパティではなく、オブジェクトの参照を比較していると思います。
Stackoverflowとリンクテキストの誰かが、IEqualityComparerを実装するクラスの使用について話していました。試してみましたが、コードが大幅に大きくなりました。何かのようなもの:
そして、この比較器を使用するには:
リスト内のオブジェクトのプロパティを見つけるためのより小さな方法はありますか?
c# - IEnumerable.Except() とカスタム比較子
Except() メソッドに問題があります。差を返す代わりに、元のセットを返します。
Account クラスに IEquatable と IEqualityComparer を実装してみました。また、Account 用に別の IEqualityComparer クラスを作成してみました。
Except() メソッドがメインから呼び出されると、カスタムの Equals() メソッドが呼び出されないように見えますが、Count() を試してみると、カスタムの GetHashCode() メソッドが呼び出されました!
私はどこかで些細な間違いを犯したと確信しており、新鮮な目が私を助けてくれることを願っています.
主要:
アカウント:
LambdaComparer:
.net - ハッシュセットと、すべてのメンバーが同一のクラスの異なるインスタンス
myclass というクラスがあるとします。
私のコードには、myclass の 2 つのインスタンス、myclass1 と myclass2 があります。それらについてのすべては、(パブリックおよびプライベート)プロパティが同一であることです。
それらの両方を HashSet に追加しようとすると、両方または 1 つだけが追加されますか? 両方を追加したくない場合は、myclass 定義で equals を上書きできますか? HasSet はそれを使用する方法を知っていますか?