【问题标题】:swift add element in a array of dictionary nested in a dictionary在嵌套在字典中的字典数组中快速添加元素
【发布时间】:2015-03-24 02:38:04
【问题描述】:

我有以下代码:

var TabActions: Dictionary<String, Array<Dictionary<String, String>>> = [:]

TabActions = ["EVENT1" : ["TARGET1" : "ACTION1"], ["TARGET2" : "ACTION2"]]

我想将 ["TARGET3" : "ACTION3"] 添加到列表中,但我不知道该怎么做。我试过了:

TabActions["EVENT1"] = [["TARGET3" : "ACTION3"]]

但它会替换值而不是添加它,并且所有其他尝试最终都会出错

最好的语法是什么?

【问题讨论】:

  • TabActions 应该是 tabActions - 实例小写 - 类/结构定义大写

标签: arrays swift dictionary nested updates


【解决方案1】:

如果您确实需要一个字典数组的字典,那么 Antonio 的答案是正确的,append 将完成这项工作:

var TabActions: Dictionary<String, Array<Dictionary<String, String>>> = [:]
TabActions = ["EVENT1" : [["TARGET1" : "ACTION1"], ["TARGET2" : "ACTION2"]]]

TabActions["EVENT1"]?.append(["TARGET3" : "ACTION3"])

另一方面,如果您可以使用更简单的字典,您只需要这样做:

var TabActions: Dictionary<String, Dictionary<String, String>> = [:]       
TabActions = ["EVENT1" : ["TARGET1" : "ACTION1", "TARGET2" : "ACTION2"]]

TabActions["EVENT1"]?["TARGET3"] = "ACTION3"

【讨论】:

  • 谢谢。在您的第二个命题(没有数组)中,如果我想要创建与此键关联的键和嵌套字典元素(“TARGET3”、“ACTION3”),如果第一个键(EVENT1)不存在,该怎么办?
  • 好点,您需要检查给定键是否存在现有字典:if let targets = TabActions["EVENT2"] { TabActions["EVENT2"]?["TARGET3"] = "ACTION3" } else { TabActions["EVENT2"] = ["TARGET3" : "ACTION3" ] }
【解决方案2】:

TabActions 字典包含数组值 - 要附加到数组,您可以使用 append 方法:

TabActions["EVENT1"]?.append(["TARGET3": "ACTION3"])

请注意,如果未找到 EVENT1 键,则不会进行添加。

【讨论】:

  • 感谢您的快速回答!如果第一个键不存在,我会怎么做,因为附加不会像你说的那样做任何事情?
猜你喜欢
  • 1970-01-01
  • 2020-06-01
  • 2016-01-20
  • 1970-01-01
  • 2019-01-16
  • 2021-01-17
  • 2023-01-22
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多