当前位置: 首页 > 编程语言 > C#

整数数组的C#哈希码分享

时间:2023-04-10 14:39:49 C#

C#整数数组的哈希码我有一个类,它内部只是一个整数数组。一旦构建,数组就永远不会改变。我想预先计算一个好的哈希码,以便可以非常有效地使用此类作为字典中的键。数组的长度少于大约30个项目,整数通常在-1000到1000之间。不是很聪明,但对于大多数实际用途来说已经足够了:编辑:由于HenkHolterman的评论而更改,谢谢。inthc=array.Length;for(inti=0;i如果你需要更复杂的东西,请看这里。你可以使用CRC32校验和。这是代码:[CLSCompliant(false)]publicclassCrc32{uint[]table=newuint[256];uint[]表{得到{返回表;}}publicCrc32(){MakeCrcTable();}voidMakeCrcTable(){for(uintn=0;n>1);否则值=值>>1;}表[n]=值;}}publicuintUpdateCrc(uintcrc,byte[]buffer,intlength){uintresult=crc;对于(intn=0;n>8);}返回结果;}publicuintCalculate(Streamstream){longpos=stream.Position;constint大小=0x32000;byte[]buf=newbyte[size];整数字节=0;uint结果=0xffffffff;做{bytes=stream.Read(buf,0,size);结果=UpdateCrc(结果,buf,字节);}while(bytes==size);=位置;返回?结果;对于通常在-1000和1000之间的值数组,我可能会使用这样的东西:staticintGetHashCode(int[]values){intresult=0;int移位=0;for(inti=0;ianyCRC(evenXOR)应该没问题。我认为选择一个好的哈希算法必须基于整数值的分布(在概率意义上)。查看维基百科以获得列表你可以采用的算法采用不同的方法,对int数组中的每个值使用递归字典。这样你就可以让.net进行原始类型散列。以上就是C#学习教程:整数数组的C#哈希码的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注---internalclassDictionaryEntry{publicDictionary>Children}publicTValueValue{get;私有集;}publicboolHasValue{得到;私有集;}publicvoidSetValue(TValuevalue){Value=value;有值=真;}publicDictionaryEntry(){Children=newDictionary>();}}internalclassKeyStackDictionary{//处理键堆栈的辅助字典//用法://vardict=newKeyStackDictionary();//int[]keyStack=newint[]{23,43,54};//字典。SetValue(keyStack,"foo");//字符串值;//if(dict.GetValue(keyStack,outvalue))//{//}privateDictionaryEntry_dict;publicKeyStackDictionary(){_dict=newDictionaryEntry();}publicvoidSetValue(TKey[]keyStack,TValuevalue){DictionaryEntrydict=_dict;对于(inti=0;i();dict.Children.Add(key,child);dict=child;}if(i==keyStack.Length-1){dict.SetValue(value);}}}//如果使用键堆栈未找到该值,则返回falsepublicboolGetValue(TKey[]keyStack,outTValuevalue){DictionaryEntrydict=_dict;for(inti=0;i如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: