高速アクセスのためにメモリに含める必要のある変換テーブルがあります。これまで私は単純なものを使用してHashtable
いました。キーは内部コードであり、値は外部コードやその他のメタデータを保持するオブジェクトでした。
次に、逆ルックアップを行う必要があります。つまり、外部コードに基づいて内部コードを取得する必要があります。私は次のオプションしか思いつかなかった:
- このルックアップ用に別のコンテナを用意します。冗長性を防ぐために、値として内部コードのみを含むハッシュテーブルを用意します。
- 現在使用しているのと同じコンテナを使用し、外部コードをキーとして使用してこれらのオブジェクトを再度保存します(衝突を防ぐためにプレフィックスを付けます)。
- キーを使用してデータをプルするのではなく、同じコンテナーに含まれる値を反復処理して、要求されたオブジェクト(O(n)、同じメモリ使用量)を見つけます。
コンテナは遅延読み込みされているため、オプション1と2は通常、最悪のシナリオでは実行されません。
誰か考えますか?そのために使用できる効率的なコンテナがあることを教えてください。
* 編集 *
GCのフレームワークであり、2つの変換配列(ディクショナリ)が必要であるという事実を受け入れると、次のコード行は、実際には1つのオブジェクトのみをメモリに格納し、次に2つの異なるポインタの下にそのオブジェクトへの2つのポインタを格納することを意味します。ハッシュ化されたセル?
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。