我正在測試我從Google搜索獲得的VB函數。我打算使用它來生成哈希碼以便快速進行字符串比較。但是,在有些情況下,兩個不同的字符串具有相同的散列碼。例如,這些字符串爲什麼這個函數生成的哈希碼不是唯一的?
「122Gen 1堆大小(.NET CLR內存W3WP):mccsmtpteweb025.20833333333333E-02」
「122Gen 2堆大小(.NET CLR內存W3WP):mccsmtpteweb015.20833333333333E-02 「
有237117279.
相同的散列碼請告訴我: - 什麼是錯的功能? - 我該如何解決?
謝謝
馬丁
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, src As Any, ByVal bytes As Long)
Private Function HashCode(Key As String) As Long
On Error GoTo ErrorGoTo
Dim lastEl As Long, i As Long
' copy ansi codes into an array of long'
lastEl = (Len(Key) - 1) \ 4
ReDim codes(lastEl) As Long
' this also converts from Unicode to ANSI'
CopyMemory codes(0), ByVal Key, Len(Key)
' XOR the ANSI codes of all characters'
For i = 0 To lastEl - 1
HashCode = HashCode Xor codes(i) 'Xor'
Next
ErrorGoTo:
Exit Function
End Function
是的,你說得對。我測試了200K字符串的這個函數,並且有超過4K的衝突。 – Martin08 2008-09-15 15:46:44