問題タブ [gethashcode]

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 に答える
8916 参照

mysql - Hibernate n:mextractHashCodeはNullPointerExceptionをスローします

hibernateでオブジェクトを挿入しているときに、次の例外が発生します。データベースからの読み取りは魅力のように機能します。データベースプロバイダーとしてMySQL5.5を使用し、3.6.5を休止状態します。

私は次のデータベーススキーマを持っています:

ここで、セル内のidと場所は主キーであり、serveCell、neighbourCellと場所はcellatlocation内の複合主キーです。

挿入したいクラス:Cell.java

Location.java

CellAtLocation.java

そして最後に、主キーマッピング自体CellAtLocationPk.java

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

c# - 等式演算子のオーバーライド

==and!=演算子をオーバーロードするクラスを実装しました。

これはうまくいくようです。ただし、警告が表示され'type' defines operator == or operator != but does not override Object.Equals(object o)ます。

さて、私はEqualsを実装しました。しかし今、私は警告を受けます'type' defines operator == or operator != but does not override Object.GetHashCode()

これはある時点で終了しますか?それとも、過負荷になりたいという理由だけで、終わりのない要件の軌跡に迷い込んだことが==あり!=ますか?

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

c# - 辞書アイテムのGetHashCode

クラスの1つでEqualsメソッドをオーバーライドします。この方法では、次のように、辞書の各ペアと別のインスタンスの辞書のペアが等しいかどうかを確認します。

ここで、GetHashCodeメソッドと提案されたものをオーバーライドする必要があります。

辞書のすべてのキー、またはキーと値に対してそれを行う必要がありますか?

基本的に、次は良いですか、それともやり過ぎですか?

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

c# - 1 つのフィールドを持つクラスで Equals と GetHashCode をオーバーライドする

私はクラスを持っています:

そして、私は派生クラスを持っています:

には、AbstractDictionaryObject共通フィールドが 1 つだけありますLangId
メソッドを(適切に)オーバーロードするには、これでは不十分だと思います。
どうすればオブジェクトを識別できますか?

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

nhibernate - これはNhibernateIDの問題とGetHashCodeの問題を解決しますか?

私が提案するソリューションにはかなりのコードが含まれますが、SqLiteがインストールされていれば、すべてをコピーしてVSテストソリューションに貼り付けることができ、自分でテストを実行できるはずです。

Nhibernateを使用してオブジェクトIDとオブジェクトの同等性およびデータベースIDの問題に苦労しているので、さまざまな投稿を読みました。ただし、コレクションと組み合わせてオブジェクトIDを適切に設定する方法を明確に把握することはできませんでした。基本的に、私が得た大きな問題は、オブジェクトがコレクションに追加されると、そのID(GetHashCodeによって派生)メソッドが変更できないことです。GetHasHCodeを実装するための推奨される方法は、ビジネスキーを使用することです。しかし、ビジネスキーが適切でない場合はどうなるでしょうか。そのエンティティを新しいビジネスキーで更新してもらいたいのですが。しかし、そのオブジェクトのIDの不変性に違反したため、コレクションが同期しなくなりました。

以下のコードは、この問題を解決するための提案です。ただし、私は確かにNHibernateの専門家ではなく、経験豊富な開発者でもないため、これが実行可能なアプローチであるかどうかについて、より上級の開発者から喜んでコメントを受け取ります。

重要な編集!正しいアプローチではないと指摘されているように、私は今、私が提案していたアプローチを検討します。私が直面していたジレンマに対して、私は別の答えを提供しました。

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

c# - .GetHashCode()は、メモリ内の参照が異なる2つのオブジェクトに対して同じ値を返す必要がありますか?

タイプの1つでEquals()メソッドをオーバーライドする必要がありますが、GetHashCode()メソッドもオーバーライドする必要があるようです。

私はわかりません:

私がAnimalタイプを持っていて、基本的に同じ(等しい)猫であるAnimalのインスタンスが2つある場合。お気に入り:

GetHashedCode()を実装して、cas_01とcat_02の両方がメモリ内の異なる参照を表している場合でも、同じ値を返す必要がありますか?

GetHashCode()が機能する方法ですか?

ありがとう

0 投票する
4 に答える
1113 参照

c# - C#.NETGetHashCode関数の質問

こんにちは私は6つの文字列プロパティを持つクラスを持っています。一意のオブジェクトは、これらのフィールドの少なくとも1つに対して異なる値を持ちます

IEqualityComparerのGetHashCode関数を実装するために、6つのプロパティすべてを連結し、結果の文字列に対してGetHashCodeを呼び出します。

私は次の疑問を持っていました:

  1. 一意の値でGetHashcodeを呼び出す必要がありますか?
  2. 6つのプロパティの連結操作により、比較が遅くなりますか?
  3. 他のアプローチを使用する必要がありますか?
0 投票する
3 に答える
360 参照

c# - GetHashCode() メソッドがオブジェクトに対して一意の値を返すようにするために従うべき規則は何ですか?

GetHashCode() メソッドがオブジェクトに対して一意の値を返すようにするために従うべき規則は何ですか?

例えば:

  • 計算にいくつかのプリブメンバーを含める必要がありますか?
  • 合計ではなく乗算する必要がありますか?
  • 特定のオブジェクト グラフに対して一意のハッシュ コードを生成していると確信できますか? 等
0 投票する
2 に答える
103 参照

c# - GetHashCodeはタイプに依存する必要がありますか?

まず、ここでGetHashCode説明するアルゴリズムを使用しています。ここで、次の(考案された)例を想像してください。

各プロパティに同じ値のaFooとaがある場合DerivedFoo、それらは同じハッシュコードを持ちます。HashSet<Foo>つまり、Linqでこのメソッドを使用することも、使用することもできDistinct、2つのインスタンスは同じものとして扱われます。

私はおそらくの使用法を誤解しているだけですGetHashCodeが、これら2つのインスタンスは異なるハッシュコードを持っていると思います。これは無効な期待GetHashCodeですか、それとも計算でタイプを使用する必要がありますか?(またはDerivedClassオーバーライドする必要がありますGetHashCode)?

PSこのトピックに関連して、SOに関する質問がたくさんあることはわかっていますが、この質問に直接答える質問は見つかりませんでした。

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

delphi - Delphi Prism: IndexOf が正しく機能するように GetHashCode および Equals メソッドをオーバーライドする方法は?

これを正しく行っているかどうかはわかりません。リストボックスにオブジェクトのリストがあり、IndexOf を使用してリスト内のオブジェクトのインデックスを取得する必要があります。

alrm は TAlarm クラスのオブジェクトです。

StackOverflow C# の質問 ( ListBox 内の項目のインデックスを取得するにはどうすればよいですか? ) に基づいて、GetHashCode と Equals メソッドをオーバーライドしようとしましたが、それでも正しく動作しません。

オーバーライドされたメソッド:

これは、AlarmListBox に入力する方法です。

コンパイラはエラーなしでコンパイルしますが、プログラムを 1 行ずつデバッグすると常に -1 が返され、これらのオーバーライドされたメソッドが呼び出されたり起動されたりすることはありません。

これらのオーバーライドを正しく実装していますか? そうでない場合、どのようにオーバーライドすればよいですか?

サンプル コードやヒント、手がかりをいただければ幸いです。ありがとう、

更新:コメントまたは回答した​​ David Heffernan と他の人へ、問題は、Rob の最後のコメントが述べているように、2 つの異なるオブジェクトを渡していることだと思います。リストボックス (UI) に TAlarmGroup を入力しますが、TAalarm を IndexOf に渡しますが、どちらも同じクラスです。これはおそらく私の問題です。私が実際にやろうとしているのは、Listbox に TAlarmGroup オブジェクトを設定し、listbox.indexof を介して文字列 (Tagname) を渡してオブジェクトの場所を検索することです。それがDelphi XEで行われる方法で、うまく機能します。上記のコードは実際のコードではありません。コードの混乱を解消すれば、おそらく GetHashcode と Equals メソッドをオーバーライドしなくても機能するでしょう。

更新:ここで何かに遭遇したと思います。Delphi XE 以下では、ListBox (UI) は AddObject と呼ばれるメソッドを提供します。パラメータはそれぞれ文字列とオブジェクトです。そのため、オブジェクトをリストボックスに入力するときに、それに合わせて文字列も提供しました。検索時に、文字列またはアラーム グループ名を渡しました。IndexOf は、オブジェクトのフィールド (TagName) ではなく、提供した各オブジェクトの文字列に対してこの文字列を検索しました。Delphi Prism では、listbox には AddObject メソッドと同様のメソッドはなく、オブジェクトのみをパラメーターとして受け入れる Add のみです。