1

我正在使用 aHashSet<T>来存储对象的集合。这些对象已经有一个唯一的 ID System.Guid,所以我宁愿HashSet<>只使用现有的 ID,而不是试图弄清楚自己如何散列对象。如何覆盖内置散列并强制我的程序使用内置 ID 值作为散列值?

还说我知道我Guid的对象的,有没有办法仅基于此HashSet<>从 a 获取对象?或者我应该改用字典。HashSet<T>Guid

4

4 回答 4

5

AHashSet<>不是基于键/值对,并且不提供“按键”访问 - 它只是一组唯一值,使用散列非常快速地检查包含。

要使用键/值对(稍后取出Guid),最简单的选项是Dictionary<Guid,SomeType>. 现有的散列码Guid应该没问题(尽管如果你需要(你不在这里)你可以提供一个IEqualityComparer<T>用于散列的。

于 2009-06-08T21:12:27.680 回答
4

覆盖GetHashCode()对象的方法。

当然,这里有一点小问题... GUID 比 int32s 大,.NET 将它用于哈希码。

于 2009-06-08T21:12:33.513 回答
1

为什么需要覆盖它?似乎可能是过早的优化。

是的,只要用字典。开发应用程序后,请通过性能调整阶段测量所有代码的性能。当且仅当此哈希函数显示为您最大的消耗时,您是否应该考虑使用性能更高的数据结构(如果有的话):-)

于 2009-06-08T21:07:19.327 回答
1

尝试查看System.KeyedCollection。它允许您将关键字段的知识嵌入到您的集合实现中。

于 2009-06-08T21:09:27.593 回答