如何控制对象如何通过哈希集进行哈希处理

时间:2009-06-08 21:05:49

标签: c# hash hashset

我正在使用HashSet<T>来存储一组对象。这些对象已经具有System.Guid的唯一ID,因此我宁愿HashSet<>只使用现有ID而不是试图弄清楚如何散列对象。如何覆盖散列中的内置并强制我的程序使用内置ID值作为哈希值?

另请说我知道Guid中某个对象的HashSet<>,是否有办法仅根据此HashSet<T>Guid获取对象?或者我应该使用字典。

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

覆盖对象的GetHashCode()方法。

当然,这里有一点点皱纹...... GUID大于int32s,.NET用于哈希码。

答案 2 :(得分:1)

为什么需要覆盖这个?似乎也许是一个不成熟的优化。

是的,只需使用字典。开发应用程序后,请进行性能调整阶段,以衡量所有代码的性能。如果且仅当如果此散列函数显示为您最大的消耗,您应该考虑更高性能的数据结构(如果有的话): - )

答案 3 :(得分:1)

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