看起来你实际上有两个以上的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
如果之前喜欢的操作不是您想要执行的操作,那么此数据结构可能无法满足您的需求。无论哪种方式,如果您首先描述总结您希望数据结构做什么的接口,那么更容易查看是否有其他替代方案。