如何在嵌套字典中将元素追加到数组中

时间:2017-03-07 02:27:09

标签: swift dictionary

我有一个嵌套字典,其中深节点是一个数组。当我尝试将一个元素附加到字典的数组元素时,我得到一个编译错误。我想要的是替换

  

[“000”:“OK”]

如果密钥是相同的“000”,或者如果密钥不同,则附加到现有元素,例如

  

[“001”:“好”]

。感谢一些指导或替代方法来更新。我得到的错误是:

  

不能对类型'[String:]的不可变值使用变异成员   字符串]]'

B = [ "EA" : [ "status": [["000": "OK"]]]]
B["EA"]?["status"] = [["000": "NOT OK"]]
print(B)

(B["EA"]?["status"])?.append(["001":"Good"])

2 个答案:

答案 0 :(得分:1)

你这样做就像超人穿上裤子一样 - 一次一条腿。拔出阵列,贴在上面,再把它放回去:

var B = [ "EA" : [ "status": [["000": "OK"]]]]
B["EA"]?["status"] = [["000": "NOT OK"]]

print(B) // ["EA": ["status": [["000": "NOT OK"]]]]

if var arr = B["EA"]?["status"] {
    arr.append(["001":"Good"])
    B["EA"]?["status"] = arr
}

print(B) // ["EA": ["status": [["000": "NOT OK"], ["001": "Good"]]]]

答案 1 :(得分:1)

因为Swift中的字典和数组都是结构类型 你可以将B的类型显式化。喜欢:

var B:[String:[String:NSMutableArray]] = [ "EA" : [ "status": [["000": "OK"]]]]
B["EA"]?["status"] = [["000": "NOT OK"]]
print(B)
//["EA": ["status":{
//    000 = "NOT OK";
//    }
//    ]]

然后你可以使用NSMutableArray方法add()

(B["EA"]?["status"])?.add(["001":"Good"])
print(B)
//["EA": ["status":{
//    000 = "NOT OK";
//    },
//    {
//    001 = Good;
//    }
//    ]]