問題タブ [hashable]

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

swift - SwiftでhashValueからhash(into:)を実装する方法は?

コンパイラからの非推奨警告を使用hashValueせずに実装する方法については、まったくわかりませんhash(into:)

「Hashable.hashValue」はプロトコル要件として非推奨です。代わりに「hash(into:)」を実装することにより、タイプ「MenuItem」を「Hashable」に適合させます

Swiftからの回答: 'Hashable.hashValue' はプロトコル要件として非推奨です。この例があります:

PagingItemそして、Parchment ( https://github.com/rechsteiner/Parchment )をカスタマイズするために、この構造体を持っています。

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

swift - Swift で Equatable と Hashable をオーバーライドする

NSManagedObject の Equatable をオーバーライドする方法はありますか? 300k オブジェクトのコアデータ データセットがあり、オブジェクトのビジネス ID に基づいて重複を削除する必要があります。

オーバーライド エラー メッセージ:

ここに画像の説明を入力

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

swift - Swift - Decimal の hashValue は X == -X と同じであり、hashValue の比較には使用できません

一方が他方の負の値である場合、2 つの Decimals を hashValue で区別できないことがわかりました。Decimals を構造体のフィールドとして使用し、その構造体は Hashable を実装してセットに入れることができるようにします。ビジネス ロジックでは、すべてのフィールドが一意である必要があるため、すべてのフィールドと組み合わせて hashValue を指定します。つまり、10 進数フィールドが他方の負の値であり、残りのフィールドが実際に等しい 2 つの構造体は、構造体全体が等しいと見なされます。これは私たちが望んでいるものではありません。

遊び場コード:

doubleLiteralの代わりに を使用してテストする場合も同じことが起こりintegerLiteralます。

回避策は、Decimals を直接比較し、必要に応じて、他の部分で必要な場合は hashValue に含めることです。

この動作は意図したものですか? 仮数部は同じなので、等しいと見なされないのは、Decimal の hashValue に符号が含まれていないためだと思いますか?

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

swift - Swift hash(into:) のキャッシュ結果 Hashable プロトコル要件

セットと辞書で頻繁に使用されるクラスがあります。パフォーマンス上の理由から、このクラスHashableは古い方法で実装し、計算されたハッシュをキャッシュします。

Xcode 10.2 では、警告が表示されます。これhashValueは非推奨であり、まもなくプロトコル要件ではなくなります。

私を悩ませているのは、hash(into:)何も返さないため、計算されたハッシュをとにかくキャッシュする機能がないことです。

遊び場で次の例を考えてみましょう

次のログが表示されます

なぜ 2 つではなく 3 つの呼び出しが表示されるのかわかりませんが、=) を実行します。

したがって、同じインスタンスを辞書キーとして使用するか、このインスタンスをセットに追加するたびに、新しいhash(into:)呼び出しが発生します。

私のコードでは、このようなオーバーヘッドは非常に高価であることが判明しました。誰かが回避策を知っていますか?