我有我需要包含在內存中的快速訪問轉換表。到目前爲止,我使用了一個簡單的Hashtable
Key是內部代碼,Value是一個持有外部代碼和其他元數據的對象。用於雙向轉換數據的.NET容器?
現在我們需要進行反向查找,這意味着要根據外部代碼獲取內部代碼。我只能拿出以下選項:
- 有另一個容器用於此查找,哈希表只包含內部代碼作爲值以防止更多的冗餘。
- 使用我現在使用的同一個容器,並使用外部代碼作爲密鑰(具有防止衝突的前綴)再次存儲這些對象。
- 不要使用Keys獲取數據,而是遍歷包含在同一容器下的值以查找請求的對象(O(n),相同的內存使用情況)。
該容器正在延遲加載,所以選項1 & 2通常不會在最壞的情況下執行。
想到任何人?請告訴我有一些我可以使用的高效容器,我錯過了!
*編輯*
作爲一個GC'd框架,並接受事實我不得不具有兩個轉換陣列(詞典),將實際上意味着予存儲的代碼的以下各行只有一個對象在內存上,然後在兩個不同的散列單元下使用兩個指針?
Dictionary<K1,V> forward;
Dictionary<K2,V> reverse;
//...
void Add(V myObject)
{
// myObject being the BLL object
forward.Add(myObject.InternalCode, myObject);
reverse.Add(myObject.ExternalCode, myObject);
}
Itamar。
爲什麼你就不能懶加載反向查找散? – Ken 2009-11-30 18:39:32
我是,即使在一個項目的基礎上(而不是一次列表)。這是我的出發點 - 試圖在性能和內存使用方面找到最佳選擇。 – synhershko 2009-11-30 18:54:46