双语字典/ C#中的地图

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

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

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

编辑:我找到了两个:

  • 我的一个
  • 另一个基于我的 ,但更完全开发与删除等。

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

HashSet HashSet方法/成员

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

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

很容易“翻转”键和值。

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

这在内存方面效率不高

好吧,如果你发现你真的无法容纳第二本字典……那么你可以在需要时生成它。 这具有不需要维护两个词典的额外好处。

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