.NET中是否存在一个有效存储键/值对的双向字典,其中键和值都是不同的,因此可以使用双射映射(即TryGetValue / TryGetKey)?天真的方法是拥有两个内部词典:一个键值和一个值键词典,但这在内存方面效率不高。
答案 0 :(得分:5)
我不相信.NET中有一个。根据键/值类型的不同,我不确定使用两个词典可能会导致 大部分效率损失:这是我在看到问题之前所做的事情,基于这很简单。
事实上,它已经非常,因为我已经在另一个Stack Overflow答案中实现了它。我会看看能不能找到它......
编辑:我发现了两个:答案 1 :(得分:2)
基本上你想要2个引用相同二进制元素的集合。您将始终拥有对这两个元素的引用的开销,但您可以采用这两种方式。每组都需要一个不同的比较器,但这只是一点开销。由于您引用了同一个元素,因此在两个集合中都没有2个副本。
答案 2 :(得分:0)
为什么这在记忆方面没有效果?除非你只有64MB RAM,否则它对大多数(甚至是大型表)来说都不是问题。如果它太大了,那么你应该真正考虑使用适当的数据库引擎。
答案 3 :(得分:0)
如果存储在字典中的值是对象类型,则唯一的内存开销将是Dictionary对象本身的内存开销。
答案 4 :(得分:0)
很容易“翻转”键和值。
var source = GetSomeDictionary();
var opposite = source.ToDictionary(x => x.Value, x => x.Key)
这在内存方面效率不高
好吧,如果你发现你真的无法容纳第二本字典......那么你可以在需要时生成它。这样做的另一个好处就是不需要维护这两个词典。
但最有可能的是,你可以拿着第二本字典 - 并希望节省时间。