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")];