問題タブ [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.
c# - GetHashCode Equals C#のクラスの実装
EqualsおよびGetHashCodeメソッドをオーバーライドする必要があるクラスPersonがあります。名前が一致する場合、または電子メールが一致する場合、2人のオブジェクトは等しくなります。かなり効率的なハッシュ関数でこれを行う良い方法は何ですか?
c# - EF4 の多対多エンティティで GetHashCode をオーバーライドできないのはなぜですか?
私の Entity Framework 4 モデル (MS SQL Server Express で動作する) には、Patient-PatientDevice-Device という多対多の関係があります。私は Poco を使用しているので、PatientDevice クラスは次のようになります。
私がこれを行うと、すべてうまくいきます:
しかし、PatientDevice クラスの GetHashCode のコメントを外すと、患者には以前に追加された PatientDevice がまだ残っています。
GetHashCode をオーバーライドして ID を返す際の何が問題になっていますか?
.net - オブジェクトのハッシュ コードの生成
DataPointCollection
2 つの Integer プロパティと 1 つの Guid プロパティを持つカスタム オブジェクト ( ) があります。そのオブジェクトで HashCode を生成して、これらのプロパティで同じ値を持つ 2 つのオブジェクトが HashSet に追加されないようにしたいと考えています。メソッドをオーバーライドする必要があることはわかっていますが、GetHashCode()
これを実現するためにハッシュ コードを生成するにはどうすればよいでしょうか。
これが私がそれをどのように使用したいかです。
私は他のアイデアを受け入れますが、これはオブジェクトのコレクションに対して LINQ クエリを実行するよりも高速であると考えました (これらのオブジェクトは非常に多数存在する可能性があります)。
c# - GetHashCode のオーバーライド
ご存じのとおり、GetHashCode は、コレクション内のオブジェクト インスタンスを識別するために使用できる、ほぼ一意の値を返します。このメソッドをオーバーライドして、独自のメソッドを実装することをお勧めします。
私の質問は、カスタム オブジェクトで作業するときにこのメソッドをオーバーライドしますか? その場合、一意の ID を生成するためにどのアルゴリズムを使用しますか?
GUID を生成し、その識別子から整数データを取得することを考えていました。
c# - GetHashCode を使用して Equals オーバーライドで等価性をテストする
Equals オーバーライド内から等価性をテストするメソッドとして GetHashCode を呼び出しても問題ありませんか?
たとえば、このコードは受け入れられますか?
c# - C# GetHashCode() を使用したデータ グラフの比較
いくつかの REST 呼び出しを使用して OAuth ソースから取得し、データベースにリレーショナルに格納するデータのグラフがあります。データ構造には、いくつかの一対多の関係を持つ約 5 ~ 10 個のテーブルが含まれます。データベースに更新が必要かどうかを確認するために、定期的にその情報を再取得したいと考えています。
多くのユーザーに対してこれを行う予定であり、そのデータは頻繁には変更されない可能性が高いため、私の目標は、データベースへの不必要な負荷を最小限に抑えることです。私の戦略は、OAuth プロバイダーからデータを照会し、結果をハッシュして、同じデータセットに対して生成した最後のハッシュと比較することです。ハッシュが一致しない場合は、単純にデータベースでトランザクションを開始し、そのユーザーのすべてのデータを吹き飛ばし、データを書き直して、トランザクションを閉じます。これにより、データベースからデータを読み込み、すべての比較作業を行って、何が変更され、どの行が追加され、どの行が削除され、変更されたかなどを確認する時間を節約できます。
私の質問: すべてのデータをメモリ内で大きな文字列として結合し、C# GetHasCode() を使用する場合、データが変更されたかどうかを確認するためのかなり信頼できるメカニズムはありますか? または、この猫の皮を剥ぐためのより良いテクニックはありますか?
ありがとう
c# - String.GetHashCode()は異なる値を返します
GetHashCode()が同じ文字列に対して異なる値を返すのはなぜですか?これを複製する方法を説明することはできませんが、これは悪ふざけではなく、次の2行が2つの別々の時間に私の時計ウィンドウから来たものであると信じてください。
これはどのように起こりますか?
これが役立つかどうかはわかりませんが、VS2010の.NET4.0で実行しており、NServiceBusアプリケーションをデバッグしています。
アップデート:
このスレッドで私が何をしたのかを知りたい場合は、x64モードで実行しているときにx86ハッシュ値を生成できますか?
c# - 列挙型int値を取得するためのGetHashCodeの使用
私は列挙型を持っています
グリッド列を検索するには、この列挙型を使用する必要があります。
私が使用している列インデックスを取得するには
どちらが問題なく動作しますか、または使用する必要があります
を使用することについて少し混乱してGetHashCode()
います。それを使って何か問題はありますか?
c# - e.keyChar は Ctrl では機能しません
このコードは、押されたボタンのハッシュコードを示していますが、コントロールボタンを押しても何もしません。誰か助けてくれませんか?
C# Winフォーム
vb.net - チェック/チェックされていないキーワードをサポートせずにVBでGetHashCodeをオーバーライドしますか?
GetHashCode()
そのため、VB で多数のカスタム オブジェクトを正しくオーバーライドする方法を見つけようとしています。少し検索すると、この素晴らしい答えにたどり着きます。
ただし、問題が 1 つあります。VBには、.NET 4.0のchecked
andキーワードがありません。unchecked
とにかく、私が知る限り。Name As String
そこで、Jon Skeet の実装を使用して、Value As Int32
、 、の 3 つの主要メンバーを持つかなり単純なクラスで、このようなオーバーライドを作成しようとしました[Type] As System.Type
。したがって、私は思いつきます:
問題: このような単純なオブジェクトでさえ、Int32 は小さすぎます。私がテストした特定のインスタンスには、単純な 5 文字の文字列として「名前」があり、そのハッシュだけでも Int32 の上限に十分近く、ハッシュの 2 番目のフィールド (値) を計算しようとすると、オーバーフローしました。checked
グラニュラー/サポートに相当する VB が見つからないため、unchecked
これを回避することはできません。
また、プロジェクト全体で整数オーバーフロー チェックを削除したくありません。これはおそらく....40% 完了しています (私が作成したものです、TBH)。さらに多くのコードを記述する必要があるため、これらのオーバーフロー チェックをかなりの時間行う必要があります。
GetHashCode
VB および Int32 用の Jon のバージョンの「安全な」バージョンは何でしょうか? または、.NET 4.0 には、MSDN で簡単に見つけられない
checked
/が含まれていますか? 編集:
リンクされたSOの質問ごとに、一番下にある愛されていない回答の1つが準解決策を提供しました。準と言うのは、それが…不正行為のように感じるからです。物乞いは選ぶ人になれませんよね?unchecked
C# からより読みやすい VB に変換し、上記のオブジェクト (名前、値、型) に合わせると、次のようになります。
これにより、コンパイラは匿名型を生成することで明らかに「チート」を開始し、おそらく整数オーバーフロー チェックを無効にして、プロジェクトの名前空間の外部でコンパイルし、計算を実行して、オーバーフローしたときにラップ アラウンドすることができます。またbox
、パフォーマンス ヒットであることがわかっているオペコードも関係しているようです。ただし、開封はありません。
しかし、これは興味深い問題を提起します。ここや他の場所で、VB と C# の両方が同じ IL コードを生成すると述べているのを数え切れないほど見てきました。これは明らかに 100% の場合ではありません...C# の </修辞的質問>unchecked
キーワードを使用すると、別のオペコードが発行されるだけです。では、両方がまったく同じ IL を生成するという仮定が繰り返され続けるのはなぜでしょうか?
とにかく、各オブジェクト モジュール内で実装できるソリューションを見つけたいと思います。オブジェクトごとに匿名型を作成しなければならないことは、ILDASM の観点からは面倒に見えます。プロジェクトに多くのクラスが実装されて
いると言っても冗談ではありません。
EDIT2: MSFT Connect のバグを公開しました。VB PM の結果の要点は、彼らがそれを検討するということでしたが、息を止めないでください:
https://connect.microsoft.com/VisualStudio/フィードバック/詳細/636564/checked-unchecked-keywords-in-visual-basic
.NET 4.5 の変更点をざっと見てみると、まだ検討していないことがわかります。おそらく .NET 5 でしょうか?
GetHashCode の制約に適合し、 VB にとって十分に高速でユニークな私の最終的な実装は、このページの「回転ハッシュ」の例から派生したものです。
また、「Shift-Add-XOR」ハッシュも適用される可能性があると思いますが、テストしていません。