我有一个n GUID列表,我需要将它们哈希到一个值。这个值可能是Guid对象的大小或Int32的大小,它并不重要,但它确实需要在统计上是唯一的(比如可能类似于MD5)。

所以一种方法可能是对它们进行排序,连接字节并获取所有字节的MD5哈希值...但这不是很快。

另一个想法:我注意到.NET中相当标准的做法是将组合对象的GetHashCode方法实现为组合对象的哈希码的XOR。因此,对我的GUID列表进行异或可能在数学上是合理的吗?

欢迎任何想法!

有帮助吗?

解决方案

如果您希望哈希对 set 有效(即顺序无关紧要),那么对每个GUID的哈希码进行异或运算是个不错的选择。

如果您确实有GUID的序列并且订单很重要,那么我建议使用我写的关于在另一个答案中 - 重复添加/乘法。

(注意,对XORing的哈希码可能不会得到与对GUID本身进行异或,然后对结果进行哈希处理相同的答案。可能是,但这取决于GUID.GetHashCode()的实现。我会哈希每个值和XOR结果在一起 - 除了其他任何东西,这是微不足道的实现。)

其他提示

不要对GUID进行异或,然后对结果进行散列。除非你使用小于GUID的哈希值,否则你只需通过简单地对GUID进行异或操作即可获得任何方式。

由于您似乎非常关心这方面的性能,因此更多信息会很有用 - 特别是,您使用内存中的GUID的不同组合(因此您只能将它们哈希一次,因为它们是创建),或者你正在加载它们并处理它们,重复的GUID不太可能?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top