Tag:

为什么String GetHashCode只处理每四个字符?

我一直在阅读这篇文章,因为它是由Jon Skeet在这个答案上联系起来的。 我试图真正理解哈希是如何工作的,以及为什么乔恩喜欢他提供的算法。 我还没有声称对此有答案,但我确实有一个关于GetHashCode的基本System.String实现的具体问题。 考虑代码,重点是注释<<<<<==========行: public override unsafe int GetHashCode() { if (HashHelpers.s_UseRandomizedStringHashing) return string.InternalMarvin32HashString(this, this.Length, 0L); fixed (char* chPtr = this) { int num1 = 352654597; int num2 = num1; int* numPtr = (int*) chPtr; int length = this.Length; while (length > 2) { num1 = (num1 <> 27) ^ *numPtr; num2 = (num2 […]

列表上的哈希函数独立于其中的项目顺序

我想要一个字典,为一组整数赋值。 例如, key是[1 2 3] , value将具有特定值。 问题是[3 2 1]需要在我的情况下处理相同所以哈希需要相等,如果我采用哈希方法。 该套装将有2到10件物品。 项目总和通常是固定的,因此我们不能根据总和制作哈希码,这是第一个自然的想法。 不是作业任务,实际上在我的代码中遇到了这个问题。 这个集合基本上是C#中的IEnumerable ,所以任何数据结构都可以存储它们。 任何帮助赞赏。 性能在这里也非常重要。 一个直接的想法:我们可以总结items^2并已经获得某种更好的哈希,但我仍然想听到一些想法。 编辑:嗯真的很抱歉伙计们 ,每个人都建议订购,我没想到我需要说实际订购和散列是我使用的当前解决方案,我正在考虑更快的替代品。