2016-07-15 4 views
-2

に文字列を変換私は確定的に与えられた文字列に同じ長いを生成することができますロングを返すUnknownDeterministicFunctionを知りたい私は2部で構成された文字列を持っているユニークなロング

(コードを参照してください)。

private void MyProgram() 
{ 
    string resultStr = "XXX"+"12345678"; 
    //1st part is a string of characters (the "XXX") 
    //2nd part is a string of numbers (the "12345678") 

    long resultLng = UnknownDeterministicFunction(myString); 
} 

private long UnknownDeterministicFunction(string inputStr) 
{ 
    // ??? 
} 

これはC#で可能ですか?

+0

なぜ反対票へ intを組み合わせますか? – MajorInc

+0

これはちょっと曖昧です。あなたが長い文字列に戻すことができないようにしたい場合は、任意の有効なハッシュコードアルゴリズムがあなたが望むことをするでしょう。 – juharr

+0

わかりました - 私はちょうどそれを使用しないでくださいhttp://stackoverflow.com/questions/9545619/a-fast-hash-function-for-string-in-c-sharp – MajorInc

答えて

0

OK答えは簡単です。

private long UnknownDeterministicFunction(string inputStr) 
{ 
    //not taking care of null... 
    return (long)inputStr.GetHashCode() 
} 
+1

2つの問題:最初に: 'inputStr == null'の場合、例外がスローされます。秒:*ハッシュ*は良い選択ですが、ユニークではありません。申し訳ありませんが、答えは*単純なものではありません。 –

+0

カウンタの例:*異なる*文字列 '" 9331582 "と' '942" 'は同じ*ハッシュ' -1864841629'を返します(* C#6.0 .Net 4.6 *);あなたのソリューションは* unique * 'long'を生成しませんでした –

1

全て

  • の最初8 **(2 ** 30)異なるストリング S(最大2ギガバイト長い)
  • があるがあります2 ** 64 differentrent long64ビットの整数)

だからlongユニーク(古き良き鳩の巣原理)ことを保証することはできません。できるだけ早くの衝突(つまり、異なるstringも同じlongを返すことができます)の場合、ハッシュ関数を実装することができます。

hash function for string

又は

Good Hash Function for Strings

通常、ハッシュ関数はInt32を返します。その場合には一つだけlong

int hash1 = GetHashOneAlgorithm(myString); 
int hash2 = GetHashAnotherAlgorithm(myString); 

long result = ((long) hash1 << 32) | hash2; 
関連する問題