C#中的双向字典/地图

时间:2009-02-20 15:06:57

标签: c# dictionary

.NET中是否存在一个有效存储键/值对的双向字典,其中键和值都是不同的,因此可以使用双射映射(即TryGetValue / TryGetKey)?天真的方法是拥有两个内部词典:一个键值和一个值键词典,但这在内存方面效率不高。

5 个答案:

答案 0 :(得分:5)

我不相信.NET中有一个。根据键/值类型的不同,我不确定使用两个词典可能会导致 大部分效率损失:这是我在看到问题之前所做的事情,基于这很简单。

事实上,它已经非常,因为我已经在另一个Stack Overflow答案中实现了它。我会看看能不能找到它......

编辑:我发现了两个:

答案 1 :(得分:2)

基本上你想要2个引用相同二进制元素的集合。您将始终拥有对这两个元素的引用的开销,但您可以采用这两种方式。每组都需要一个不同的比较器,但这只是一点开销。由于您引用了同一个元素,因此在两个集合中都没有2个副本。

HashSet HashSet Methods/Members

答案 2 :(得分:0)

为什么这在记忆方面没有效果?除非你只有64MB RAM,否则它对大多数(甚至是大型表)来说都不是问题。如果它太大了,那么你应该真正考虑使用适当的数据库引擎。

答案 3 :(得分:0)

如果存储在字典中的值是对象类型,则唯一的内存开销将是Dictionary对象本身的内存开销。

答案 4 :(得分:0)

很容易“翻转”键和值。

var source = GetSomeDictionary();
var opposite = source.ToDictionary(x => x.Value, x => x.Key)
  

这在内存方面效率不高

好吧,如果你发现你真的无法容纳第二本字典......那么你可以在需要时生成它。这样做的另一个好处就是不需要维护这两个词典。

但最有可能的是,你可以拿着第二本字典 - 并希望节省时间。