2009-02-20 20 views
3

在.NET中是否有雙字節字典可有效存儲鍵/值對,其中鍵和值都是不同的,因此可以使用雙映射(即TryGetValue/TryGetKey)?幼稚的方法將是有兩個內部字典:一個鍵值和一個值鍵字典,但這在內存方面效率不高。在C#中的單詞本字典/地圖

回答

0

爲什麼這在內存方面沒有效率?除非你只有64MB內存,否則對大多數(甚至是大型表格)來說都不是問題。如果它變得太大,那麼你應該真正考慮使用適當的數據庫引擎。

5

我不相信在.NET中有一個。根據鍵/值類型的不同,我不確定使用兩個字典很可能會導致效率損失的很大一部分:這是我看到問題之前要做的事情,因爲它很簡單。

事實上,它的簡單,因爲我已經在另一個堆棧溢出答案中實現它。我去看看我能找到它......

編輯:我發現了兩個:

0

如果開發存儲在字典中的值是對象類型,唯一的內存開銷將是字典對象本身的內存開銷。

2

基本上你想要2套引用相同的二進制元素。您將始終具有對這兩個元素的引用的開銷,但是您會有這種方式。每一組都需要一個不同的比較器,但這沒有多少開銷。由於您引用的是同一個元素,因此在兩個集合中都沒有2個副本。

HashSet HashSet Methods/Members

0

可以很容易地 「炫」 鍵和值。

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

這是效率不高的內存

非常明確,如果你發現你真的不能舉行第二字典...然後在需要的時候可以生成它。這具有不需要維護兩個字典的額外好處。

但最有可能的是,你可以拿着第二本字典 - 並且想要爲了節省時間。