我有幾個異類鍵類 - int和字符串 - 我想通過通用接口與他們合作。這很簡單,只需將int轉換爲字符串,但顯然會導致性能問題。我看到的另一個選項是將它們裝箱到「對象」,這也看起來不完美,或者以某種方式從字符串生成唯一整數(前者「字符串」和「int」之間不會有連接,因此它們只能在「字符串「域),這裏的quatsion是」如何「?如何從字符串生成唯一的整數?
7
A
回答
11
只需要string.GetHashCode()
從string
返回int
與非常低的碰撞概率。
1
As @tudor指出GetHashCode是從字符串(和其他對象)生成哈希代碼的受支持方式。不幸的是,沒有辦法做這樣的轉換,所以一個整數代表唯一的字符串,除非你對字符串設置了嚴格的限制。
I.e.如果你的字符串足夠短(即2個Unicode或4個ASCII字符)比明顯的一對一映射,或者你的字符串集合是有限的並且事先知道的話。
關於這個問題的一些閱讀:潛在的問題叫pigeonhole principle,它保證了碰撞。由於Birthday paradox碰撞很可能發生在合理的小集合上。
2
請注意string.GetHashCode()
。
在.NET文檔指出https://msdn.microsoft.com/en-us/library/system.string.gethashcode(v=vs.110).aspx
哈希碼本身不能保證穩定。對於 單個版本的.NET Framework,相同字符串狀態的散列碼可以在.NET 框架的不同版本和跨平臺(如32位和64位)之間有所不同。在某些情況下,他們甚至可以通過 應用領域的不同
相關問題
- 1. 從ruby中的唯一字符串範圍內生成整數
- 2. 如何生成唯一的字符串
- 3. 從字符串生成唯一的ID
- 4. 如何生成唯一字符串?
- 5. 如何從字符串集合中生成一個唯一的字符串?
- 6. 爲唯一的字符串種子生成唯一的長整數
- 7. 從字母數字字符串生成唯一標識
- 8. 的Servlet /生成唯一的字符串
- 9. 從唯一字符串輸入生成唯一ID
- 10. PHP:生成唯一的字符串
- 11. 生成從2個關鍵字一個唯一的字符串
- 12. 從字符串數組中生成唯一的初始字符串
- 13. 如何從長度爲28的兩個唯一字符串中生成長度爲28的唯一字符串?
- 14. 如何從整數中獲得唯一的短字符串?
- 15. 在FsCheck中生成唯一字符串
- 16. 通過UDFunction生成唯一字符串
- 17. 如何在編譯時從字符串文字生成整數?
- 18. 如何唯一字符串的數字爲整數
- 19. 根據給定的字符串生成一個唯一的整數
- 20. 如何生成20個字符的字母數字唯一ID
- 21. 從字母數字字符串創建唯一整數
- 22. 如何使用jsp生成唯一的字符串?
- 23. 如何在循環中生成唯一的字符串對象
- 24. 如何從自動遞增的整數生成唯一的ID?
- 25. 生成字母數字標識(唯一字符串)
- 26. 如何從Python生成唯一的64位整數?
- 27. 從javascript中的某個特定字符串生成唯一UID
- 28. 從字符串生成唯一文件夾名稱的問題
- 29. 生成唯一字符串幸運數字
- 30. 如何爲字符串內容生成唯一鍵?
「非常低」是不夠的,我不希望創建衝突解決機制,它看起來像開銷這裏 – Yan
@ user1437713:有多少串做你有? – Tudor
@ user1437713 - 你想要的是不可能的。像你想要的任何算法都有碰撞風險evens GUID實際上並不是唯一的。 –