我正在使用 HashSet<T> 存储一个对象集合。这些对象已经具有独特的ID System.Guid, ,所以我宁愿 HashSet<> 只需使用现有ID而不是尝试弄清楚如何哈希对象即可。如何覆盖哈希的构建和迫使我的程序以ID值的构建为哈希值?

还说我知道 Guid 我的对象 HashSet<>, ,有没有办法从一个地方获取对象 HashSet<T> 基于此 Guid 独自的?或者我应该使用词典。

有帮助吗?

解决方案

一个 HashSet<> 不是基于密钥/值对,也不提供“按密钥”访问提供的 - 它只是一组唯一值,使用哈希非常快速检查围栏。

使用密钥/值对(通过 Guid 稍后)最简单的选项将是 Dictionary<Guid,SomeType>. 。现有的哈希代码 Guid 应该没事(尽管 如果需要 (您不在这里)您可以提供 IEqualityComparer<T> 用于哈希。

其他提示

覆盖 GetHashCode() 对象的方法。

当然,这里有一个稍微皱纹... GUIDS比INT32S大,该net用于载量。

为什么需要覆盖这个?似乎是过早的优化。

是的,只需使用词典即可。开发应用程序后,请浏览性能调整阶段,在该阶段,您可以测量所有代码的性能。如果并且仅当此哈希功能显示为最大的排水时,您才考虑更具性能的数据结构(如果有的话):-)

尝试研究 System.KeyedCollection. 。它使您可以将关键字段的知识嵌入到收集实现中。

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