我正在用C#编写一个简单的IDictionary抽象,它包装了一个Dictionary。基本上,它将多个值映射到一个键。当删除值列表中的最后一项时,我无法决定是删除键及其空列表,还是保留它(以避免在重用键的情况下实例化新集合),并在确定键是否存在时检查键的值计数。
发布于 2008-11-23 14:26:15
我会删除这些集合,以便您的MultiMap具有一致的行为。如果我使用您的MultiMap,我会非常惊讶(也很不高兴)发现丢失的键的行为与键以前是否在MultiMap中的行为不同。
Clear()会删除集合吗?
如果不移除集合,还可能造成意外的内存泄漏。开发人员可以添加许多项,然后删除它们。内存使用量(GC之后)应恢复到添加这些项目之前的相同数量。
我不会担心创建集合的成本。我担心你为你的MultiMap创建的合同。如果在分析应用程序后发现这是一个问题,您可以为该行为修改或创建一个特殊的MultiMap。不要陷入过早优化的陷阱。
发布于 2008-11-23 13:20:40
在.NET 3.5中,有ILookup<TKey,TValue>和Lookup<TKey,TValue>充当多个映射。内置实现(Lookup<TKey,TValue>)是不可变的,但我已经用miscutil编写了一个EditableLookup<TKey,TValue>。
在该版本中;yes -如果最后一项(具有该密钥)被删除,我将删除该密钥。这使得查看存在哪些键(即.Keys等)变得更容易。
发布于 2008-11-23 02:55:48
为什么不将密钥视为存在的,即使所有值都已删除,并提供显式API来删除密钥?
https://stackoverflow.com/questions/312040
复制相似问题