私の(比較的)古いコードのバグに遭遇し、Stringハッシュプロパティが密でユニークでないことが判明しました。多くの異なる文字列は同じハッシュ値を持ちます。スウィフト文字列ハッシュは永続データのインデックスに使用する必要がありますか?
docを参照すると、情報をまったく持たない「ハッシュテーブルアドレスとして使用できる符号なし整数」しか見つかりませんでした。
私のコードスニペットは、次のように簡単です:
func getCacheIndex(sUrl: String) -> Int {
return sUrl.hash
}
し、次のように生成し、与えられた別の文字列(XXXXXXXは置換キーの文字列を表しながら見出しparamは異なります)のために:
FileCache hash is -4052854053573130360 for url
https://maps.googleapis.com/maps/api/streetview?size=675x900&location=46.414382,10.013988&heading=135&pitch=-0.76&key=XXXXXXXXXXXXXXXXXXX
FileCache hash is -4052854053573130360 for url
https://maps.googleapis.com/maps/api/streetview?size=675x900&location=46.414382,10.013988&heading=180&pitch=-0.76&key=XXXXXXXXXXXXXXXXXXX
StringにはhashValueがありますが、それを実行する間に何かを保持するために使用しないでください。
あなたはこれをSwiftでどうやって解決しますか?私自身のハッシュコードを提供する必要がありますか?
はい、安定したハッシュとより大きいダイジェストサイズが必要な場合は、独自のハッシュ関数を実装する必要があります。 SHA2-256のようなものは、256ビット長の(驚いた)ハッシュ値を出力します。ハッシュ衝突(すなわち、「ハッシュ(a)==ハッシュ(b)ここでa!= b」)は避けられない生命の事実である。しかし、何をしようとしていますか? –
私は、URLに基づいてファイルにインデックスを付けるための安定版(複数回実行とiOS版)を探しています。助言がありますか? –