структура данных для многоключевых данных? - PullRequest
3 голосов
/ 26 июня 2009

существует ли обычно используемая структура данных для многоключевых данных? например (ключ1, ключ2, ..., ключN) -> значение. Раньше я использовал словари словарей (в c #), а затем написал свою собственную оболочку, чтобы синтаксис выглядел немного лучше. но, похоже, мне все еще нужно написать обертку для каждого N-словаря, где N - это количество ключей, поскольку я должен определить вложенную структуру словаря в коде.

при условии, что я использую c #, существует ли структура данных, которая лучше инкапсулирует этот вид использования и может содержать произвольное количество ключей с производительностью поиска, подобной хеш-таблице? Я не могу просто объединить все ключи в один уникальный ключ, потому что мне нужно иметь возможность сделать что-то вроде

foreach key2 in data[key1]
    foreach key3 in data[key1][key2]
        foreach key4 in data[key1][key2][key3]

1 Ответ

2 голосов
/ 26 июня 2009

Нет, это не так.

Без нарушения безопасности типов, я думаю, есть два решения.

  • Словари словарей - Dictionary<T1, Dictionary<T2, TRes>>
  • Словари кортежей - Dictionary<Tuple3<T1, T2, T3>, Res>. Обратите внимание, что - в отличие от F #, где вы можете написать Map<T1 * T2 * T3, Res> - C # не имеет встроенного типа кортежа - вам придется реализовать это отдельно как универсальный класс или структуру.

Но что касается вашего примера кода, зубчатые словари (Словари словарей) являются единственной альтернативой.

...