首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中创建三级嵌套字典

在C#中创建三级嵌套字典
EN

Stack Overflow用户
提问于 2012-11-12 03:37:25
回答 4查看 3.2K关注 0票数 5

我想创建一个如下类型的字典,

代码语言:javascript
复制
var data = new Dictionary<string, Dictionary<string, Dictionary<string, int>>>();

当我尝试以下面的方式向字典添加值时,我得到了一个KeyNotFound异常。

代码语言:javascript
复制
data[key1][key2][key3]= 3;

我在这里做错了什么?我假设如果在字典中找不到键,它会自动添加到字典中。

否则,有没有办法在运行时添加密钥?

我期望以下类型的输出:

代码语言:javascript
复制
 [male,[animal,[legs,4]

               [eyes,2]]
       [human,[hands,2]
               [ears,2]]

[female,[animal,[nose,1]

                 [eyes,2]]
         [bird,[wings,2]
                 [legs,2]]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-12 03:39:26

这里的问题是,您只尝试将其分配给最里面的字典。但这两个外层并不存在。

您需要对每个级别进行明确说明:

代码语言:javascript
复制
if (!data.ContainsKey(key1))
    data[key1]  = new Dictionary<string, Dictionary<string, int>();

..。诸若此类。编写它可能有点麻烦,所以如果你经常需要它,我建议你在字典上创建一个扩展方法,让你可以很容易地做到这一点。

如果为字典中的关键字赋值,则会创建该条目。但是,如果您读取字典中的键,而该键不存在,则会得到一个异常。

票数 6
EN

Stack Overflow用户

发布于 2012-11-12 03:52:06

根据您的密钥分布和条目数量,使用Tuple<string, string, string>作为密钥可能更容易:

代码语言:javascript
复制
var data = new Dictionary<Tuple<string, string, string>, int>();
data[Tuple.Create("key1", "key2", "key3")] = 1;
var itemFromDictionary = data[Tuple.Create("key1", "key2", "key3")];
票数 3
EN

Stack Overflow用户

发布于 2012-11-12 03:46:08

当您需要声明每个级别时,您只需声明一个级别的字典:

代码语言:javascript
复制
var data = new Dictionary<string, new Dictionary<string, new Dictionary<string, int>>>();

希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13334677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档