首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultiMap实现

MultiMap实现
EN

Stack Overflow用户
提问于 2008-11-23 02:38:32
回答 4查看 851关注 0票数 1

我正在用C#编写一个简单的IDictionary抽象,它包装了一个Dictionary。基本上,它将多个值映射到一个键。当删除值列表中的最后一项时,我无法决定是删除键及其空列表,还是保留它(以避免在重用键的情况下实例化新集合),并在确定键是否存在时检查键的值计数。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-11-23 14:26:15

我会删除这些集合,以便您的MultiMap具有一致的行为。如果我使用您的MultiMap,我会非常惊讶(也很不高兴)发现丢失的键的行为与键以前是否在MultiMap中的行为不同。

Clear()会删除集合吗?

如果不移除集合,还可能造成意外的内存泄漏。开发人员可以添加许多项,然后删除它们。内存使用量(GC之后)应恢复到添加这些项目之前的相同数量。

我不会担心创建集合的成本。我担心你为你的MultiMap创建的合同。如果在分析应用程序后发现这是一个问题,您可以为该行为修改或创建一个特殊的MultiMap。不要陷入过早优化的陷阱。

票数 4
EN

Stack Overflow用户

发布于 2008-11-23 13:20:40

在.NET 3.5中,有ILookup<TKey,TValue>Lookup<TKey,TValue>充当多个映射。内置实现(Lookup<TKey,TValue>)是不可变的,但我已经用miscutil编写了一个EditableLookup<TKey,TValue>

在该版本中;yes -如果最后一项(具有该密钥)被删除,我将删除该密钥。这使得查看存在哪些键(即.Keys等)变得更容易。

票数 2
EN

Stack Overflow用户

发布于 2008-11-23 02:55:48

为什么不将密钥视为存在的,即使所有值都已删除,并提供显式API来删除密钥?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/312040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档