如何在多级字典中设置/获取值?

时间:2014-11-25 00:07:18

标签: ios nsmutabledictionary

我有一个名为stuff的NSMutableDictionary,结构如下:

 {
    "ThingStats" : { "Thing1" : { "stat1" : 12,
                                  "stat2" : 21 } ,
                     "Thing2" : { "stat1" : 4,
                                  "stat2" : 15 }
              } ,

    "OtherStuff" : {...}
 }

ThingStats外,它还可以在第一级添加其他词典。

使用下标很容易获得Thing1's stat1,如下所示:

stat1 = stuff[@"ThingStats"][@"Thing1"][@"stat1"];

并将其设置为:

stuff[@"ThingStats"][@"Thing1"][@"stat1"] = @13;

当钥匙存在时,这一切都很有效。

第一个问题:如果ThingStats中不存在stuff词典,那么启动ThingStats结构的最佳方式是什么?第一个条目?例如,如果我只有stat1stat2的{​​{1}}值,那么从空{{1}结束下面显示的Thing1字典的最简单方法是什么?字典?假设stuff不会为零。

stuff

第二个问题:稍后,当我获得stuff { "ThingStats" : { "Thing1" : { "stat1" : 12, "stat2" : 21 } } } 的{​​{1}}值时,将这些值添加到最终的最佳方式是什么?这种结构:

stat1

第三个问题:如果我想使用上面的下标技术为stat设置一个新值,我必须先做这样的事情,以确保密钥一直存在于价值:

stat2

1 个答案:

答案 0 :(得分:0)

我认为你走在正确的轨道上。你的问题3回答你的第一个问题。对于您的第一个问题,您可以使用:

//Setup
NSMutableDictionary *stuff = [NSMutableDictionary dictionary];

if (!stuff[@"ThingStats"]) {
    stuff[@"ThingStats"] = [NSMutableDictionary dictionary];
    stuff[@"ThingStats"][@"Thing1"] = [NSMutableDictionary dictionary];
    stuff[@"ThingStats"][@"Thing2"] = [NSMutableDictionary dictionary];
}

//Use

stuff[@"ThingStats"][@"Thing1"][@"stat1"] = @12;
stuff[@"ThingStats"][@"Thing1"][@"stat2"] = @21;
stuff[@"ThingStats"][@"Thing2"][@"stat1"] = @4;
stuff[@"ThingStats"][@"Thing2"][@"stat2"] = @15;