我有一个n GUID列表,我需要将它们哈希到一个值。这个值可能是Guid对象的大小或Int32的大小,它并不重要,但它确实需要在统计上是唯一的(比如可能类似于MD5)。
所以一种方法可能是对它们进行排序,连接字节并获取所有字节的MD5哈希值...但这不是很快。
另一个想法:我注意到.NET中相当标准的做法是将组合对象的GetHashCode方法实现为组合对象的哈希码的XOR。因此,对我的GUID列表进行异或可能在数学上是合理的吗?
欢迎任何想法!
答案 0 :(得分:2)
如果您希望哈希对 set 有效(即顺序无关紧要),那么对每个GUID的哈希码进行异或运算是个不错的选择。
如果您确实有GUID的序列并且顺序很重要,那么我建议使用我写的关于in another answer的相同方法 - 重复添加/乘法。
(注意,对XORing的哈希码可能不会得到与对GUID本身进行异或,然后对结果进行哈希处理相同的答案。可能是,但这取决于GUID.GetHashCode()的实现。我会哈希每个值和XOR结果在一起 - 除了其他任何东西,这是微不足道的实现。)
答案 1 :(得分:0)
不要对GUID进行异或,然后对结果进行散列。除非你使用小于GUID的哈希值,否则你只需通过简单地对GUID进行异或操作即可获得任何方式。
由于您似乎非常关心此方面的性能,因此更多信息会很有用 - 特别是,您使用内存中的GUID的不同组合(因此您只能将它们哈希一次,因为它们是创建),或者你正在加载它们并处理它们,重复的GUID不太可能?