2012-06-05 142 views
7

我有幾個異類鍵類 - int和字符串 - 我想通過通用接口與他們合作。這很簡單,只需將int轉換爲字符串,但顯然會導致性能問題。我看到的另一個選項是將它們裝箱到「對象」,這也看起來不完美,或者以某種方式從字符串生成唯一整數(前者「字符串」和「int」之間不會有連接,因此它們只能在「字符串「域),這裏的quatsion是」如何「?如何從字符串生成唯一的整數?

回答

11

只需要string.GetHashCode()string返回int與非常低的碰撞概率。

+0

「非常低」是不夠的,我不希望創建衝突解決機制,它看起來像開銷這裏 – Yan

+0

@ user1437713:有多少串做你有? – Tudor

+1

@ user1437713 - 你想要的是不可能的。像你想要的任何算法都有碰撞風險evens GUID實際上並不是唯一的。 –

1

As @tudor指出GetHashCode是從字符串(和其他對象)生成哈希代碼的受支持方式。不幸的是,沒有辦法做這樣的轉換,所以一個整數代表唯一的字符串,除非你對字符串設置了嚴格的限制。

I.e.如果你的字符串足夠短(即2個Unicode或4個ASCII字符)比明顯的一對一映射,或者你的字符串集合是有限的並且事先知道的話。

關於這個問題的一些閱讀:潛在的問題叫pigeonhole principle,它保證了碰撞。由於Birthday paradox碰撞很可能發生在合理的小集合上。

相關問題