C# 在C语言中创建三级嵌套字典#
我想创建以下类型的词典C# 在C语言中创建三级嵌套字典#,c#,dictionary,C#,Dictionary,我想创建以下类型的词典 var data = new Dictionary<string, Dictionary<string, Dictionary<string, int>>>(); 我做错了什么?我假设如果在字典中找不到一个键,它会自动添加到字典中 否则,有没有办法在运行时添加键 我希望输出为以下类型: [male,[animal,[legs,4] [eyes,2]] [human,[hands,2]
var data = new Dictionary<string, Dictionary<string, Dictionary<string, int>>>();
我做错了什么?我假设如果在字典中找不到一个键,它会自动添加到字典中
否则,有没有办法在运行时添加键
我希望输出为以下类型:
[male,[animal,[legs,4]
[eyes,2]]
[human,[hands,2]
[ears,2]]
[female,[animal,[nose,1]
[eyes,2]]
[bird,[wings,2]
[legs,2]]
这里的问题是,您只是试图分配给最里面的字典。但这两个外层并不存在 您需要明确每个级别:
if (!data.ContainsKey(key1))
data[key1] = new Dictionary<string, Dictionary<string, int>();
if(!data.ContainsKey(键1))
data[key1]=新建字典当您需要声明每个级别时,只声明一个级别的字典:
var data = new Dictionary<string, new Dictionary<string, new Dictionary<string, int>>>();
var data=newdictionary();
希望这将对您有所帮助。您正在尝试仅分配内部级别值。您必须分配给所有级别
试试这个:
data["male"] = new[] {
{"animal", new[] {
{"legs",4},
{"eyes", 2}
},
{"human", new[] {
{"hands", 2}
}
};
我这里没有编译器,所以我不确定它是否能工作。根据您的密钥分布和条目数,使用元组作为密钥可能更容易:
var data = new Dictionary<Tuple<string, string, string>, int>();
data[Tuple.Create("key1", "key2", "key3")] = 1;
var itemFromDictionary = data[Tuple.Create("key1", "key2", "key3")];
var data=newdictionary();
数据[Tuple.Create(“key1”、“key2”、“key3”)]=1;
var itemFromDictionary=data[Tuple.Create(“key1”、“key2”、“key3”);
+1!我不知道分配密钥会自动创建一个条目!虽然没有技术上的原因,你可以这样做。我强烈建议不要在需要维护的任何东西中保留这样的数据结构。将您试图表示的内容分解为类,这样更易于维护。我理解这似乎很容易,但对于每个键和值代表什么,您没有语义意义,这会让您头疼。
var data = new Dictionary<Tuple<string, string, string>, int>();
data[Tuple.Create("key1", "key2", "key3")] = 1;
var itemFromDictionary = data[Tuple.Create("key1", "key2", "key3")];