替换NSDictionary中的键值

时间:2014-08-02 12:55:11

标签: ios objective-c xcode dictionary nsdictionary

我有一个像这样的NSDictionary:

{
"name": "Hayagreeva", //String
"age": 3,  //Number
"subjects": {  //Array
    "rhymes": {   //Dictionary 1
        "test1": 10,
        "test2": 20,
        "test3": 30
    },
    "games": {  //Dictionary 2
        "test1": 40,
        "test2": 50,
        "test3": 60
    },
    "crayoning": { //Dictionary 3
        "test1": 70,
        "test2": 80,
        "test3": 90
    }
},
"date": "2008-02-16T10:06:00Z"  //Date
}

现在我需要替换关键主题的值>游戏> test1从40到60.我知道了获取另一个字典对象和创建类似字典的长度过程,但这个过程很耗时,可能是一个错误的策略。我在这里也搜索了很多问题但是他们都有办法删除第一级字典的密钥(比如删除密钥"主题"在上面的代码中)。所以我想知道是否有一种简单有效的方法来更新内部关键字的值,因为我需要在当前项目的许多情况下执行此过程。提前谢谢。

编辑:我也尝试了类似

的内容
[dict removeValueForKey:@"subjects.games.test1"];

但这并不奏效。我希望这一行可以帮助您理解我所需的功能。

1 个答案:

答案 0 :(得分:3)

如果该结构设置在石头上并且不会改变那么它就像:

NSDictionary *topLevelDict = ...;
topLevelDict[@"subjects"][@"games"] = @{
    @"test1" : @(60),
    @"test2" : @(50),
    @"test3" : @(60)
};

词典字典操作起来很痛苦,创建一个自定义模型对象总是更好,它允许更容易的操作,验证以及特定于域的功能,如序列化等。