У меня есть «таблица» в памяти, которая может выглядеть примерно так:
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-словаря, каждый из которых имеет ключ, используя один из столбцов (FavoriteNumber, Name, Profession), и каждое значение в uber-Dictionaries содержит 2 словаря, которые сами по себе с каждым из оставшихся столбцов (поэтому значения в uber-словаре «Name» имеют тип Dictionary<FavoriteNumber,Profession[]>
и Dictionary<Profession, FavoriteNumber[]>
Для этого требуется 2 поиска в 2 словарях и еще один обход массива (который обычно содержит 1 или 2 элемента.)
Может кто-нибудь предложить лучший способ сделать это? Я не возражаю тратить дополнительную память, так как таблица, вероятно, будет небольшой (не более 20 записей), но я готов пожертвовать небольшим ЦП, чтобы сделать его более удобным для сопровождения кода ...