問題タブ [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.
python - リストをアルゴリズム内の辞書キーとして実装しようとしましたが、簡単な解決策は何ですか?
Apriori アルゴリズムを実装しようとしています... http://codeding.com/articles/apriori-algorithm Python で。
最高レベルのデータ構造は次のようになります。
任意の数のセット、それらのセットのカーディナリティ (k レベル)、およびそれらのセットごとに計算した値を追跡する必要があります。すべてのセットにリストを使用することは、順序を維持し、反復可能であるため、良い考えだと思いました。上記のように、itemSetDictionary 内のキーとしてリストを使用しようとしましたが、反復可能なデータ構造を Python 辞書内のキーにすることは許可されていないことがわかりました。
この問題を解決する最も簡単な方法を見つけようとしています。キーが反復可能なデータ構造ではなくオブジェクトになるように、いくつかのクラスを作成できることはわかっていますが、それを変更するには多くの時間がかかると感じています。
何か案は?
haskell - Data.HashTable が (Data.Hashable からの) ソルトによるハッシュを使用するのはなぜですか?
(のみ/基本)メソッドとして をData.HashTable
使用する理由がわかりません。Data.Hashable
hashWithSalt
これは、ハッシュ値を一度計算してオブジェクトに格納するという自然な最適化には適合しません (Haskell オブジェクトは不変であるため、当然のことです)。
それを使用したい場合はHashTables
、実装する必要がありますhashWithSalt
。(1.2.0.* から 1.2.1.* になりhash
、クラス メソッドとしてハッシュ可能が再導入されましたが、これは役に立ちませんか?)
実際の Table 実装はhashWithSalt
(HashTable.ST.Linear
まったく使用せず、HashTable.ST.Cuckoo
2 つの固定ソルトのみを使用します) を使用していないようです。
dictionary - Swift列挙型をDictionaryキーとして使用するにはどうすればよいですか? (Equatable準拠)
「ステーション」の選択を表す列挙型を定義しました。ステーションは一意の正の整数によって定義されるため、次の列挙型を作成して、負の値で特別な選択を表すことができるようにしました。
これらの値を辞書のキーとして使用したいと思います。Dictionary を宣言すると、StationSelector が Hashable に準拠していないという予想されるエラーが発生します。Hashable への準拠は、単純なハッシュ関数を使用して簡単に行うことができます。
ただし、Hashable
への準拠が必要Equatable
であり、コンパイラを満たすために列挙型で equals 演算子を定義できないようです。
コンパイラは、これは 1 行に 2 つの宣言があり、;
afterを入れたいと文句を言いますがfunc
、これも意味がありません。
何かご意見は?
swift - クラス外で同等のプロトコルを定義する必要があるのはなぜですか?
Hashable プロトコルを実装するとき。次のように、同等のプロトコル関数をクラス外で定義する必要があります。以下の通り。
私にとってはちょっと奇妙です。上記の例では、 func == はクラス Swap に属している必要があります。では、なぜ func == をクラス外で宣言する必要があるのでしょうか??
objective-c - NSObject は Hashable ですが、NSObject を採用するプロトコルは Hashable ではありませんか?
レーダーを提出する前に、コミュニティでサニティ チェックを行います。
.h Obj-C ファイル:
.swift ファイル (ブリッジング ヘッダー経由で上記のプロトコル定義にアクセスできるファイル):
NSObject クラスを調べると、それ (またはマップ先の NSObjectProtocol) が Hashable プロトコルで必要な hashValue メソッドを実装しておらず、明示的に採用していないことがわかります。
そのため、舞台裏のどこかで NSObject はこれにもかかわらず Hashable としてフラグが立てられていますが、NSObject/NSObjectProtocol を採用するプロトコルには拡張されていません。
バグがありますか、それとも何か不足していますか?
:) テオ
追加情報:
ドキュメントでは、次のことが示唆されています。
- ディクショナリのキー タイプの唯一の要件は、それが Hashable であり、実装されていること
==
です。 - 実際にプロトコルを使用できます。
ディクショナリ キー タイプのハッシュ値ディクショナリのキー型として使用するには、型をハッシュ可能にする必要があります。つまり、型はそれ自体のハッシュ値を計算する方法を提供する必要があります。ハッシュ値は、a == b の場合、a.hashValue == b.hashValue となるように、等しいと比較されるすべてのオブジェクトで同じ Int 値です。
Swift のすべての基本型 (String、Int、Double、および Bool など) はデフォルトでハッシュ可能であり、これらの型はすべて辞書のキーとして使用できます。値が関連付けられていない列挙メンバー値 (「列挙」で説明) も、デフォルトでハッシュ可能です。
注: Swift の標準ライブラリの Hashable プロトコルに準拠させることで、独自のカスタム型を辞書キー型として使用できます。Hashable プロトコルに準拠する型は、hashValue と呼ばれる取得可能な Int プロパティを提供する必要があり、「等しい」演算子 (==) の実装も提供する必要があります。型の hashValue プロパティによって返される値は、同じプログラムの異なる実行間、または異なるプログラムで同じである必要はありません。プロトコルへの準拠の詳細については、プロトコルを参照してください。
xcode - CFString は Hashable プロトコルに準拠していませんか?
最近、iOS 8.1 で動作するように Xcode 6.1 に更新しましたが、現在、最新のプロジェクトでエラーが発生しています。
次の行で、「CFString! はプロトコル Hashable に準拠していません」というエラーが表示されます。
Xcode 6.0.1 を実行している場合、このエラーは発生しませんでした。また、Xcode 6.1 は非常に遅いです。つまり、非常に遅いため、実際には何もロードしません。インデックス作成には数分かかり、ビルドには時間がかかりすぎて、座っていることができませんでした... また、クラッシュします。
私の主な問題は、Hashable プロトコルにあります。どうしたの?
python - Python: リスト内の重複を探す
フロートのリストがあり、その中にいくつの重複があるか知りたいです。
私はこれを試しました:
collections.counter も使用しようとしましたが、常に同じエラーが発生します
同様の質問を見回しましたが、ハッシュ可能の意味、リスト(またはnumpy配列)がハッシュ可能ではない理由、およびどのようなタイプを使用する必要があるかを理解できません。
swift - 迅速なハッシュ可能なプロトコル ハッシュ関数は一意の値を返す必要がありますか?
私は iOS の迅速な Tetris チュートリアル* に取り組んでおり、それを完了して動作させています。しかし、私は 1 つの特定の側面、つまり Hashable プロトコルについて困惑しています。関数:
行は 0..9、列は 0..20 です。メモには、この関数について「行と列のプロパティの排他的論理和を返し、各ブロックに一意の整数を生成します。」と記載されています。しかし、私の理解では、0^1 は 1^0 などと同じです...ハッシュ関数がこのように一意でない場合に問題があるかどうか、または衝突は一般的に問題ないかどうかを知りたいですか? 私が言うように、アプリケーションは正常に動作しているように見えます...
* https://www.bloc.io/tutorials/swiftris-build-your-first-ios-game-with-swift#!/chapters/681
python - ハッシュ不可能なインスタンスの明らかにハッシュ可能なメソッドで hash() を呼び出せないのはなぜですか?
私が辞書を持っているとしましょう:
メソッドがありますclear()
:
...__hash__
属性があります:
...呼び出し可能です:
では、なぜハッシュ化できないのでしょうか。
注:オブジェクトがハッシュ化できないことは知っていdict
ます。前述のように、オブジェクトはハッシュ化できないと主張しているように見えますが、なぜこの制限がオブジェクトのメソッドにも適用されるのか興味があります。