簡體   English   中英

.NET容器用於雙向轉換數據?

[英].NET container for two-way conversion data?

我需要將轉換表包含在內存中以便快速訪問。 到目前為止,我使用的是簡單的Hashtable其中的Key是內部代碼,而Value是保存外部代碼和其他元數據的對象。

現在我們需要進行反向查找,這意味着要基於外部代碼來獲取內部代碼。 我只能提出以下選擇:

  1. 還有一個用於此查找的容器Hashtable,它僅包含內部代碼作為Value,以防止更多的冗余。
  2. 使用我現在使用的相同容器,然后使用外部代碼作為鍵再次存儲這些對象(具有前綴以防止沖突)。
  3. 不要使用Key提取數據,而是遍歷同一容器下包含的Values以找到請求的對象(O(n),相同的內存使用量)。

容器正在延遲加載,因此選項1&2在最壞的情況下通常不會執行。

有人在想嗎? 請告訴我,有一個我可以使用的高效容器,我錯過了!

*編輯*

作為GC的框架,並接受我必須擁有兩個轉換數組(字典)這一事實,以下幾行代碼實際上意味着我僅在內存中存儲了一個對象,然后在兩個不同的情況下為其存儲了兩個指針哈希單元?

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。

構建一個自定義集合類,該類具有兩個內部哈希表(字典),每個方向上一個。

  public BiHashTable<K, V>
  {
     private Dictionary<K, V> vals = new Dictionary<K, V>();
     private Dictionary<V, K> keys = new Dictionary<V, K>();
     public void Add(K key, V val)
     {
        vals.Add(key, val);
        keys.Add(val, key);
     }
     public K this[v val] { get { return keys[val]; } }
     public V this[K key] { get { return vals[key]; } }
     // etc... 
  }

注意:這將是有問題的,因為K和V都是相同的類型,那么您需要使用不同的公式...

我寧願使用Dictionary<TKey, TValue>兩個實例

它有利於代碼可讀性

您確定這本詞典是性能瓶頸嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM