[英]how can i hash strings into a specific number of buckets
我正在嘗試提出一種算法來將字符串哈希到特定數量的桶中,但是對於如何做到這一點卻沒有任何運氣想法?
我有一個像這樣的字符串列表:
A.JPG
b.htm
c.gif
D.JPG
e.swf
我想運行一個函數來根據字符串得到1到4之間的數字。
egajpg將是3
b.htm將是2
c.gif將是1
等等
它需要保持一致,所以如果我在a.jpg上運行它總是返回3。
這個算法用於在服務器之間分割資源......
可以從server3.mydomain.com訪問egajpg
b.htm將從server2.mydomain.com訪問
等等
有誰知道我會怎么做呢?
任何建議將不勝感激!
干杯
蒂姆
您可能會發現以下博文有用。 提出的算法是:
int bucketIndex = (int)((uint)"d.jpg".GetHashCode() % (uint)buckets.Length);
int bucket = (int)(unchecked(((uint)s.GetHashCode())) % 4 + 1)
(其中s
是字符串)
標准的GetHashCode和%將起作用: Math.Abs("aaaa".GetHashCode()) % numberOfBuckets
。
編輯感謝Thomas Levesque提醒GetHashCode()返回<0。添加Math.Abs以獲得正確的代碼,但其他答案中的版本可能更好。
使用基於共享計算機密鑰的哈希算法。 這將為每個字符串創建一個唯一標識符。 如果需要整數,則使用字典對象將字符串映射到整數。 每次添加新字符串時,都將其鍵設置為當前字典長度。 最后,將字典存儲在基於場的狀態對象(如共享會話)中,以便每個站點實例都可以引用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.