異種キー(intとstring)を持つクラスがいくつかあり、共通のインターフェースを介してそれらを操作したいと思います。intをstringに変換するだけで非常に簡単ですが、明らかにパフォーマンスの問題が発生します。私が見る別のオプションは、それらを「オブジェクト」にボックス化することです。これも完璧ではないようです。または、文字列から一意の整数を生成します(以前の「文字列」と「int」の間に結合はないため、「文字列」ドメイン)とここでの質問は「どのように」ですか?
3 に答える
衝突確率が非常に低いからstring.GetHashCode()
を返すものを取得します。int
string
に注意してくださいstring.GetHashCode()
。
.Netのドキュメントには、https: //msdn.microsoft.com/en-us/library/system.string.gethashcode(v = vs.110).aspxと記載されています。
ハッシュコード自体が安定しているとは限りません。同一の文字列状態のハッシュコードは、.NET Frameworkのバージョン間、および.NET Frameworkの単一バージョンのプラットフォーム(32ビットや64ビットなど)間で異なる場合があります。場合によっては、アプリケーションドメインによっても異なる可能性があります
@tudorが指摘したように、GetHashCodeは、文字列(およびその他のオブジェクト)からハッシュコードを生成するためにサポートされている方法です。残念ながら、そのような変換を行う方法はないため、文字列のセットに厳しい制限を課さない限り、整数は一意の文字列を表します。
つまり、文字列が明らかな1対1のマッピングよりも十分に短い場合(つまり、2つのUnicodeまたは4つのASCII文字)、または文字列のセットが制限されており、事前にわかっている場合です。
主題に関するいくつかの読書:衝突を保証する鳩の巣原理と呼ばれる根本的な問題。誕生日のパラドックスのため、衝突はかなり小さなセットで発生する可能性が非常に高くなります。