Swift 如何将元素附加到嵌套字典中的数组

Swift 如何将元素附加到嵌套字典中的数组,swift,dictionary,Swift,Dictionary,我有一个嵌套字典,其中深层节点是一个数组。当我试图将一个元素附加到字典的数组元素时,我得到一个编译错误。我正在尝试的是替换 [“000”:“OK”] 如果键是相同的“000”,或者如果键是不同的,则附加到现有元素,例如 [“001”:“好”] 。感谢您的指导或其他更新方法。我得到的错误是: 无法对类型为“[[String: 字符串]]' 就像超人穿裤子一样——一次一条腿。拉出阵列,附加到它,然后再放回: var B = [ "EA" : [ "status": [["000": "OK"]]]]

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

[“000”:“OK”]

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

[“001”:“好”]

。感谢您的指导或其他更新方法。我得到的错误是:

无法对类型为“[[String: 字符串]]'


就像超人穿裤子一样——一次一条腿。拉出阵列,附加到它,然后再放回:

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"]]]]

就像超人穿裤子一样——一次一条腿。拉出阵列,附加到它,然后再放回:

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"]]]]

因为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()


因为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”]?。追加([“001”:“Good”])
。不过请注意,这并不是特别有效,因为我相信数组和内部字典都会被复制。有关避免这种情况的方法,请参阅。但实际上,使用字典数组值的字典几乎肯定表明您应该使用其他数据结构。如果你的字典有静态键,它们应该是结构。这是非常有效的观点,也是我正在努力解决的问题。我有一个表格,可以映射到字典里。表单中有很多元素,但并不是所有元素都已填充。我需要记录已填充的元素,以便只保存已输入或更改的元素。为了使问题复杂化,用户可能希望保留同一字段的先前条目。我的数据记录如下所示:[模块:[字段:[[版本:值]]]。我正在考虑拆分数组。可能重复的只需删除括号–
b[“EA”]?[“status”]?。追加([“001”:“Good”])
。不过请注意,这并不是特别有效,因为我相信数组和内部字典都会被复制。有关避免这种情况的方法,请参阅。但实际上,使用字典数组值的字典几乎肯定表明您应该使用其他数据结构。如果你的字典有静态键,它们应该是结构。这是非常有效的观点,也是我正在努力解决的问题。我有一个表格,可以映射到字典里。表单中有很多元素,但并不是所有元素都已填充。我需要记录已填充的元素,以便只保存已输入或更改的元素。为了使问题复杂化,用户可能希望保留同一字段的先前条目。我的数据记录如下所示:[模块:[字段:[[版本:值]]]。我正在考虑拆分阵列。马特-感谢你提供了清晰的示例,以及你关于IOS 10的书籍,我一直试图将它们作为我寻求答案的第一步。我想我应该更仔细地阅读你的书,但是书中的内容太多了,我很难跟上。不幸的是,我的“超人裤子”笑话也在书中的某个地方!我可能需要更好的笑话。马特-谢谢你提供的清晰的例子和你关于IOS 10的书,我总是把它们作为我寻求答案的第一步。我想我应该更仔细地阅读你的书,但是书中的内容太多了,我很难跟上。不幸的是,我的“超人裤子”笑话也在书中的某个地方!我可能需要更好的笑话。这很有用。谢谢你的信息。这是非常有用的。谢谢你的信息。