我想创建一个如下类型的字典,
var data = new Dictionary<string, Dictionary<string, Dictionary<string, int>>>();当我尝试以下面的方式向字典添加值时,我得到了一个KeyNotFound异常。
data[key1][key2][key3]= 3;我在这里做错了什么?我假设如果在字典中找不到键,它会自动添加到字典中。
否则,有没有办法在运行时添加密钥?
我期望以下类型的输出:
[male,[animal,[legs,4]
[eyes,2]]
[human,[hands,2]
[ears,2]]
[female,[animal,[nose,1]
[eyes,2]]
[bird,[wings,2]
[legs,2]]发布于 2012-11-12 03:39:26
这里的问题是,您只尝试将其分配给最里面的字典。但这两个外层并不存在。
您需要对每个级别进行明确说明:
if (!data.ContainsKey(key1))
data[key1] = new Dictionary<string, Dictionary<string, int>();..。诸若此类。编写它可能有点麻烦,所以如果你经常需要它,我建议你在字典上创建一个扩展方法,让你可以很容易地做到这一点。
如果为字典中的关键字赋值,则会创建该条目。但是,如果您读取字典中的键,而该键不存在,则会得到一个异常。
发布于 2012-11-12 03:52:06
根据您的密钥分布和条目数量,使用Tuple<string, string, string>作为密钥可能更容易:
var data = new Dictionary<Tuple<string, string, string>, int>();
data[Tuple.Create("key1", "key2", "key3")] = 1;
var itemFromDictionary = data[Tuple.Create("key1", "key2", "key3")];发布于 2012-11-12 03:46:08
当您需要声明每个级别时,您只需声明一个级别的字典:
var data = new Dictionary<string, new Dictionary<string, new Dictionary<string, int>>>();希望这能对你有所帮助。
https://stackoverflow.com/questions/13334677
复制相似问题