Похоже, у вас на самом деле более двух уровней Dictionary
. Поскольку вы не можете поддерживать переменное количество словарей, используя синтаксис этого типа:
Dictionary<string, Dictionary<string, ... >...> nestedDictionary;
Я могу только предположить, что это число больше двух. Допустим, это три. Для любой структуры данных, которую вы строите, у вас есть предполагаемое использование и операции, которые вы хотите эффективно выполнять.
Я собираюсь предположить, что вам нужны такие звонки:
var dictionary = new ThreeLevelDictionary();
dictionary.Add(string1, string2, string3, value);
var value = dictionary[string1, string2, string3];
dictionary.Remove(string1, string2, string3);
И (критический вопрос) описываемый вами обратный поиск:
var strings = dictionary.FindKeys(value);
Если это операции, которые вам нужно выполнить и выполнить быстро, то одна из структур данных, которую вы можете использовать, это Dictionary
с клавишей Tuple
:
public class ThreeLevelDictionary<TValue> : Dictionary<Tuple<string, string, string>, TValue>
{
public void Add(string s1, string s2, string s3, TValue value)
{
Add(Tuple.Create(s1, s2, s3), value);
}
public TValue this[string s1, string s2, string s3]
{
get { return this[Tuple.Create(s1, s2, s3)]; }
set { value = this[Tuple.Create(s1, s2, s3)]; }
}
public void Remove(string s1, string s2, string s3)
{
Remove(Tuple.Create(s1, s2, s3);
}
public IEnumerable<string> FindKeys(TValue value)
{
foreach (var key in Keys)
{
if (EqualityComparer<TValue>.Default.Equals(this[key], value))
return new string[] { key.Item1, key.Item2, key.Item3 };
}
throw new InvalidOperationException("missing value");
}
}
Теперь у вас есть все возможности для создания обратного просмотра хеш-таблицы с использованием другого Dictionary
, если производительность показывает, что это узкое место.
Если предыдущими понравившимися операциями были , а не те, которые вы хотите выполнить, то эта структура данных может не соответствовать вашим потребностям. В любом случае, если вы сначала опишите интерфейс, в котором кратко излагается, что вы хотите, чтобы структура данных делала, тогда будет легче увидеть, есть ли другие альтернативы.