【问题标题】:Replacing key-values in NSDictionary替换 NSDictionary 中的键值对
【发布时间】:2014-09-25 13:02:48
【问题描述】:

我有一个这样的 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"];

但这不起作用。我希望这行代码可以帮助您理解我想要的功能。

【问题讨论】:

  • 这有助于创建一个新字典,但我需要的是我想替换字典深处存在的键的值并同时保留我自己的字典。
  • 它不仅可以创建,还可以编辑。
  • 我尝试使用我的字典对其进行初始化,并使用要替换的值传递键路径,但它使用唯一替换的键创建了一个新字典。
  • 请给我看看你的代码

标签: ios objective-c xcode dictionary nsdictionary


【解决方案1】:

如果该结构一成不变并且不会改变,那么它很简单:

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

字典的字典操作起来很痛苦,创建一个自定义模型对象总是更好的,它允许更轻松地操作、验证以及序列化等特定领域功能的额外好处。

【讨论】:

  • 如果“游戏”是 3 个字典的数组,你能告诉我该怎么做吗?如果可行,我会接受你的回答。
  • @PradeepMittal 在这种情况下,分配时将使用额外级别的字典子脚本(即topLevelDict[@"subjects"][@"games"][@"another_dict"])。
  • 那么如何给出索引呢?如果 games 是一个数组并且所有 3 个索引处都有 another_dict 键?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
相关资源
最近更新 更多