簡體   English   中英

我怎樣才能將字符串散列到特定數量的桶中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM