4

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

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

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
等访问

有谁知道我会怎么做?

任何建议将不胜感激!

干杯

蒂姆

4

4 回答 4

4

您可能会发现以下博客文章很有用。提出的算法是:

int bucketIndex = (int)((uint)"d.jpg".GetHashCode() % (uint)buckets.Length);
于 2011-03-23T23:09:09.637 回答
1

标准 GetHashCode 和 % 将起作用:Math.Abs("aaaa".GetHashCode()) % numberOfBuckets.

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

于 2011-03-23T23:08:47.403 回答
1
int bucket = (int)(unchecked(((uint)s.GetHashCode())) % 4 + 1)

s字符串在哪里)

于 2011-03-23T23:10:25.030 回答
-1

使用基于共享机器密钥的哈希算法。这将为每个字符串创建一个唯一标识符。如果您需要整数,则使用字典对象将字符串映射到整数。每次添加新字符串时,将其键设置为当前字典长度。最后将字典存储在基于场的状态对象中,例如共享会话,以便每个站点实例都可以引用它。

于 2011-03-23T23:12:06.250 回答