题
我正在使用 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. 。它使您可以将关键字段的知识嵌入到收集实现中。
不隶属于 StackOverflow