Bijective Dictionary /Map in C#
本问题已经有最佳答案,请猛点这里访问。
.NET中是否有一个双目标字典,有效地存储键/值对,其中键和值都是不同的,所以双目标映射(即TryGetValue/TryGetKey)是可能的?幼稚的方法是使用两个内部字典:一个键值字典和一个值键字典,但这在内存方面是不高效的。
我不相信.NET中有一个。根据键/值类型的不同,我不确定使用两个字典可能会造成这么大的效率损失:这是我在看到问题之前会做的事情,因为问题很简单。
实际上,它非常简单,因为我已经在另一个堆栈溢出答案中实现了它。我看看能不能找到它…
编辑:我找到两个:
- 我的一个
- 另一个基于我的,但更充分地发展与删除等。
实际上,您需要两个引用相同二进制元素的集合。您将始终拥有对这两个元素的引用的开销,但是您可以这样做。每一组都需要一个不同的比较器,但开销很小。因为您引用了同一个元素,所以在这两个集合中,您没有2个副本。
哈希集哈希集方法/成员
很容易"翻转"按键和值。
1 2 | var source = GetSomeDictionary(); var opposite = source.ToDictionary(x => x.Value, x => x.Key) |
this is not efficient in terms of memory
号
好吧,如果你发现你真的拿不住第二本字典…然后您可以在需要时生成它。这样做的另一个好处是不需要同时维护这两个词典。
但最有可能的是,你可以拿着第二本字典——为了节省时间,你还想这么做。
如果字典中存储的值是对象类型,则唯一的内存开销将是字典对象本身的内存开销。
为什么这在记忆方面不有效?除非您只有64MB的RAM,否则对于大多数(甚至是大表)来说,这都不是问题。如果它变得太大,那么您应该考虑使用适当的数据库引擎。