2

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

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

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

欢迎任何想法!

4

2 回答 2

2

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

如果您实际上有一系列GUID 并且顺序很重要,那么我建议使用我在另一个答案中写过的相同方法- 重复添加/相乘。

(请注意,对哈希码进行异或可能不会得到与对 GUID 本身进行异或然后对结果进行哈希处理相同的答案。可能是这样,但这取决于 GUID.GetHashCode() 的实现。我会对每个值和对结果进行异或运算——除此之外,这很容易实现。)

于 2008-11-14T16:29:31.823 回答
0

不要对 GUID 进行异或运算,然后对结果进行哈希处理。除非您使用小于 GUID 的散列,否则您无法通过简单地对 GUID 进行异或运算获得任何收益。

由于您似乎真的很关心性能,因此提供更多信息会很有用 - 特别是,您是否使用内存中的 GUID 的不同组合(因此您可以在创建它们时只对它们进行一次哈希处理),或者您是否正在加载它们并处理它们,并且重复的 GUID 不太可能?

于 2008-11-14T16:50:13.623 回答