Какова лучшая структура данных для этой справочной таблицы в оперативной памяти?

В моем случае "moduleResolution": "node" было пропущено в tsconfig.json.

5
задан Rob Sobers 13 March 2009 в 15:23
поделиться

5 ответов

У Вас есть два hashmaps.

  • Один от StringKey для оценки.

  • Один от EnumKey для оценки.

Вы не должны копировать все экземпляры Значения, те объекты могут быть совместно использованы двумя hashmaps.

Если это - МНОГО объектов, Вы могли бы хотеть использовать два treemaps вместо двух hashmaps. Но существенный принцип ("Совместно используют Значения") относится к обеим структурам. Одно множество значений с двумя картами.

4
ответ дан 14 December 2019 в 01:17
поделиться

Хорошо... "Неправильно" резкий способ поместить его. Я думаю, что, потому что наиболее распространенный словарь является "единственным ключом к значению", и большое усилие входит в обеспечение эффективных структур данных для этого (карты), часто лучше просто использовать двух из тех, совместно используя память для значений если вообще возможный.

5
ответ дан 14 December 2019 в 01:17
поделиться

ILookup LINQ (TKey, TElement) интерфейс может помочь. Принятие Вашего Словаря является чем-то как:

Dictionary<carKey, carValue> cars;

Вы могли использовать:

ILookUp<carValue, carKey> lookup = cars.ToLookup(x => x.Value, x => x.Key);

(... на самом деле я думаю, что, возможно, немного неправильно читал вопрос - но ILookUp мог бы все еще отвечать всем требованиям, но ключ/набор значений, возможно, должен был бы быть ключом и перечислением.)

0
ответ дан 14 December 2019 в 01:17
поделиться

Действительно необходимо ввести в ту же структуру с обоими типами ключа? Вы, вероятно, не должны восстанавливать сложную структуру данных сами. Вы могли сделать своего рода инкапсуляцию для справочной таблицы так, чтобы у Вас действительно было две справочных таблицы, если память не является проблемой. Вы могли использовать эту структуру инкапсуляции для моделирования способности вытащить значение из "той же" структуры с любым типом ключа.

ИЛИ

Если существует некоторый способ отобразиться между перечислением значений и строковым ключом, Вы могли бы пойти тем путем только с наличием одного типа справочной таблицы.

1
ответ дан 14 December 2019 в 01:17
поделиться

Если бы каждое значение, как гарантируют, будет доступно обоими типами ключей, другая идея состояла бы в том, чтобы преобразовать один тип ключа к другому. Например:

public Value getValue(String key)
{
    dictionary.get(key); // normal way
}

public Value getValue(Enum enumKey)
{
    String realKey = toKey(enumKey);
    getValue(realKey); // use String key
}

У Вас могла быть своя реализация Перечисления toKey () метод, который возвращает их Строковый ключ, или, возможно, имейте другой словарь, который отображает Перечислимые значения на Строковые дубликаты.

-1
ответ дан 14 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: