我如何将字符串散列到特定数量的桶中

6 c# hash bucket

我正在尝试提出一种算法,将字符串散列到特定数量的桶中,但还没有想到如何做到这一点?

我有一个这样的字符串列表:

a.jpg
b.htm
c.gif
d.jpg
e.swf

我想运行一个函数来根据字符串获取 1 到 4 之间的数字。

egajpg 将是 3
b.htm 将是 2
c.gif 将是 1
等等

它需要保持一致,因此如果我在 a.jpg 上运行该函数,它总是返回 3。

该算法用于在服务器之间分配资源......

egajpg 将从 server3.mydomain.com 访问b.htm 将从 server2.mydomain.com 等
访问

有谁知道我将如何去做这件事?

任何建议将不胜感激!

干杯

蒂姆

Ale*_*kov 1

标准 GetHashCode 和 % 可以工作:Math.Abs("aaaa".GetHashCode()) % numberOfBuckets.

编辑感谢 Thomas Levesque 提醒 GetHashCode() 返回 < 0。添加 Math.Abs​​ 以获得正确的代码,但其他答案中的版本可能会更好。

  • 如果“GetHashCode”返回“int.MinValue”,这将会失败,因为“Math.Abs​​(int.MinValue)”会抛出“OverflowException”。 (2认同)