次のようなメモリ内の「テーブル」があります。
Favorite# Name Profession
--------- ---------- ------------------
3 Names.Adam Profession.Baker
9 Names.Bob Profession.Teacher
7 Names.Carl Profession.Coder
7 Names.Dave Profession.Miner
5 Names.Fred Profession.Teacher
そして、私がやりたいことは、3 つのフィールドのいずれかを使用して、迅速かつ効率的なルックアップを行うことです。言い換えれば、私は欲しい:
myTable[3]
そしてmyTable[Names.Adam]
、そしてmyTable[Professions.Baker]
すべてに戻る{3,Names.Adam,Profession.Baker}
myTable[Profession.Teacher]
{9,Names.Bob,Profession.Teacher}
と の両方を返し{5,Names.Fred,Profession.Teacher}
ます。
テーブルは、ユーザーのアクションに従って実行時に作成され、データベース接続が保証されないセクションで使用されるため、データベースに格納できません。
現在、私は「単純に」(ハァッ!)これを3つのuber-Dictionariesを使用して保存し、それぞれが列(FavoriteNumber、Name、Profession)の1つを使用してキーを設定し、2つのDictionariesを保持するuber-Dictionariesの各値をキーにしています残りの列のそれぞれ (したがって、"Name" uber-dictionary の値は型Dictionary<FavoriteNumber,Profession[]>
とDictionary<Profession, FavoriteNumber[]>
これには、2 つの辞書での 2 つの検索と、配列の別のトラバース (通常は 1 つまたは 2 つの要素を保持します) が必要です。
誰でもこれを行うためのより良い方法を提案できますか? テーブルが小さい (20 エントリ以下) 可能性が高いため、余分なメモリを消費することは気にしませんが、コードをより簡単に保守できるようにするために、CPU を少し犠牲にしても構わないと思っています...