問題タブ [equality]

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 投票する
20 に答える
108380 参照

.net - アイテムの順序に関係なく、2 つのコレクションが等しいかどうかを比較する

2 つのコレクションを (C# で) 比較したいのですが、これを効率的に実装する最善の方法がわかりません。

Enumerable.SequenceEqualに関する他のスレッドを読みましたが、それはまさに私が探しているものではありません。

私の場合、両方に同じアイテムが含まれている場合、2 つのコレクションは等しくなります (順序に関係なく)。

例:

私が通常行うことは、あるコレクションの各アイテムをループして、それが他のコレクションに存在するかどうかを確認し、次に他のコレクションの各アイテムをループして最初のコレクションに存在するかどうかを確認することです。(長さを比較することから始めます)。

ただし、これは完全に正しいわけではなく、おそらく 2 つのコレクションが等しいかどうかを比較する最も効率的な方法ではありません。

間違っていると私が考えることができる例は次のとおりです。

これは私の実装と同じです。各アイテムが見つかった回数をカウントし、両方のコレクションでカウントが等しいことを確認する必要がありますか?


例はある種の C# (疑似 C# と呼びましょう) で書かれていますが、どの言語で答えてもかまいません。

注:簡単にするために例では整数を使用しましたが、参照型オブジェクトも使用できるようにしたいと考えています (内容ではなくオブジェクトの参照のみが比較されるため、これらはキーとして正しく動作しません)。

0 投票する
9 に答える
31038 参照

c# - 参照型の 2 つのインスタンスを比較するための「ベスト プラクティス」とは何ですか?

最近これに遭遇しました。これまで、2 つの参照型に実際に同じデータが含まれているかどうか(つまり、同じように見える 2 つの異なるインスタンス)を確認するために、等価演算子 ( == ) および/またはEqualsメソッドを喜んでオーバーライドしてきました。

自動テスト (参照/期待データと返されたデータの比較) に慣れてきたので、これをさらに使用しています。

MSDN のコーディング標準ガイドラインのいくつかを調べているときに、それを勧める記事に出くわしました。これで、記事がこれを言っている理由を理解しました(それらは同じインスタンスではないため)が、質問には答えていません:

  1. 2 つの参照型を比較す​​る最良の方法は何ですか?
  2. IComparableを実装する必要がありますか? (これは値型のみに予約する必要があるという言及も見ました)。
  3. 私が知らないインターフェースはありますか?
  4. 私たちは自分自身を転がすべきですか?

どうもありがとう^_^

アップデート

私はいくつかのドキュメントを読み間違えたようです (長い一日でした)

参照型を実装している場合、型が Point、String、BigNumber などの基本型のように見える場合は、参照型で Equals メソッドをオーバーライドすることを検討する必要があります。ほとんどの参照型は、 Equals をオーバーライドする場合でも、等価演算子をオーバーロードしないでください。ただし、複素数型など、値のセマンティクスを持つことを目的とした参照型を実装している場合は、等値演算子をオーバーライドする必要があります。

0 投票する
14 に答える
448262 参照

python - 「==」と「is」に違いはありますか?

私のGoogle-fuは私に失敗しました。

Pythonでは、同等性に関する次の2つのテストは同等ですか?

これは、インスタンスを比較するオブジェクト(たとえば)にも当てはまりますlistか?

さて、この種の答えは私の質問です:

では、テストは、それらが同じオブジェクトであるかどうかを確認するために==どこでテストするかを評価しますか?is

0 投票する
11 に答える
219836 参照

c - Cで構造体の等価性をどのように比較しますか?

標準 C で構造体の 2 つのインスタンスが等しいかどうかを比較するにはどうすればよいですか?

0 投票する
16 に答える
93351 参照

objective-c - isEqual: および hash をオーバーライドするためのベスト プラクティス

isEqual:Objective-C で適切にオーバーライドするにはどうすればよいですか? 「キャッチ」は、2 つのオブジェクトが (メソッドによって決定されるように) 等しい場合isEqual:、それらは同じハッシュ値を持つ必要があるようです。

Cocoa Fundamentals GuideIntrospectionセクションには、という名前のクラスについて、次のようにコピーされた をオーバーライドする方法の例があります。isEqual:MyWidget

ポインターの等価性、次にクラスの等価性をチェックし、最後にとプロパティisEqualToWidget:のみをチェックするを使用してオブジェクトを比較します。例が示していないのは、オーバーライドする方法です。namedatahash

等式に影響しない他のプロパティがあると仮定しましょうage。ハッシュのみに影響を与えるhashようにメソッドをオーバーライドするべきではありませんか? もしそうなら、どうやってそれをしますか?とのハッシュを追加するだけですか?例えば:namedatanamedata

それで十分ですか?より良いテクニックはありますか?のようなプリミティブがある場合はどうなりますintか? それらを変換しNSNumberてハッシュを取得しますか? またはのような構造体NSRect

( Brain fart : 元々は「bitwise OR」を と一緒に書きました|=。加算を意味します。)

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

java - URL.equals が Java でインターネットにアクセスする必要があることを回避するにはどうすればよいですか?

Java クラス ライブラリの URL クラスのequals()メソッドは、DNS 要求を作成してホスト名の IP を取得し、2 つの IP が等しいかどうかを確認します。これは、同じ から作成された URL でも発生しますString。このインターネット アクセスを回避する方法はありますか?

0 投票する
7 に答える
2099 参照

c# - 2 つの ICollection があるかどうかを調べる最速の方法コレクションには同じオブジェクトが含まれています

ICollection<T>2 つのコレクションにまったく同じエントリが含まれているかどうかを確認する最も速い方法は何ですか? 総当りは明らかですが、もっとエレガントな方法があるのではないかと考えていました。

C# 2.0 を使用しているため、可能であれば拡張メソッドは使用しないでください。

編集: 答えは、順序付けされたコレクションと順序付けられていないコレクションの両方にとって興味深いものであり、うまくいけばそれぞれで異なるでしょう。

0 投票する
48 に答える
1983441 参照

javascript - JavaScript の比較では、どの等号演算子 (== と ===) を使用する必要がありますか?

私はJSLintを使用してJavaScriptを調べていますが、ステートメント内で比較するなどのことを行うときに、 ==(2つの等号)を(3つの等号)に置き換えるための多くの提案を返しています。===idSele_UNVEHtype.value.length == 0if

に置き換える==とパフォーマンス上の利点はあり===ますか?

多くの比較演算子が存在するため、パフォーマンスの向上は歓迎されます。

型変換が行われない場合、パフォーマンスは向上し==ますか?

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

language-agnostic - ポーリング:渡されたオブジェクトがLHSタイプと一致しない場合の等式の正しい動作?

findbugsについて関連する質問をしましたが、もっと一般的な質問をしましょう。

ポリモーフィズムが可能なオブジェクト指向言語で作業していると仮定します。

言語が静的型チェック(Java、C ++など)をサポートしているとします。

言語がパラメータの分散を許可しないと仮定します(たとえば、Java、再び...)

Objectをパラメーターとして受け取る等式操作をオーバーライドする場合、パラメーターが、呼び出されたLHSと同じタイプまたはサブタイプではない状況でどうすればよいですか?

オプション1-オブジェクトが明らかに等しくないため、falseを返します

オプション2-言語が実際に分散をサポートしている場合(これが望ましい)、コンパイル時にエラーとしてキャッチされるため、キャスト例外をスローします。したがって、別のタイプが送信される状況は違法であるはずなので、実行時にこのエラーを検出することは理にかなっています。

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

c# - System.Collections.Generic.Dictionary とは.Equals は実際に行うのですか?

今日、一般的な辞書の単体テストを行っているときに、これに遭遇しました。

場合を除いて失敗しますactual == expected(オブジェクト参照は同じです)。明らかに、actual.Equals(expected)false も返します。

結構ですが、 の実装System.Collections.Generic.Dictionary<int, string>.Equalsが参照の等価性のみを行う場合、 のポイントはIEquatable何ですか? 言い換えれば、ジェネリック コレクションに対して値の等価性を実現する組み込みの方法がないのはなぜでしょうか?

編集これまでの回答に感謝します。明らかに私の例では値型を使用していますが、私の不満はすべてのオブジェクトに当てはまると思います。ジェネリック コレクションの等価性が、その型の等価性の和集合にならないのはなぜですか? 参照の等価性を見つけるための別の規定があるため、予期しない動作は実際には問題になりません。IEquatableKonrad Rudolph が指摘しているように、これにより、 を実装するオブジェクトのみを保持するコレクションの制約が導入されると思います。ただし、Dictionary のようなオブジェクトでは、これはあまり問題にならないようです。