Swift 3 - 在比较后更新字典数组中的键:值.请协助



我有一个字典数组,作为对URL的JSON响应

JSONResponse1 = 
[{"id":"100", "name":"Matt", "phone":"0404040404", "address":"TBC"}
,{"id":"110", "name":"Sean", "phone":"0404040404", "address":"TBC"}
, {"id":"120", "name":"Luke", "phone":"0404040404", "address":"TBC"}]

我有另一个字典数组,作为对另一个 URL 的 JSON 响应

JSONResponse2 = 
[{"id":"100", "address":"1 Main Street"}
, {"id":"120", "address":"3 Main Street"}]

这两个响应都通过键"id"链接。我想将 JSONResponse2 与 JSONResponse1 进行比较,并更新 JSONResponse1 以便显示地址。所以 JSONResponse1 的输出变成:

JSONResponse1 = 
[{"id":"100", "name":"Matt", "phone":"0404040404", "address":"1 Main Street"}
,{"id":"110", "name":"Sean", "phone":"0404040404", "address":"TBC"}
, {"id":"120", "name":"Luke", "phone":"0404040404", "address":"3 Main Street"}]

请注意,所有"id"并不总是存在于 JSONResponse2 中,在这种情况下,我想保持原样

这是我的尝试:

    for item in JSONResponse2.enumerated() {
        for var items in JSONresponse1 {
            if item.element["id"] == items["id"] {
                let address_correct = item.element["address"] as! String
                items["address"] = address_correct
                self.finalDictionary.append(items)
            } else {
                self.finalDictionary2.append(items)
            }
        }
    }

但这会产生一个非常长的 finalDictionary2,因为 for 循环重复。有什么办法吗?

当然,它会发生,因为内部循环中的else分支,当 JSONResponse1 中的项目不在 JSONResponse2 中时执行,而是在 JSONresponse1 中的当前项目不等于 JSONresponse2 中的当前项目时执行 - 这与您想要的不是一回事。

删除else分支并在此之后添加新的for循环,这将负责查找那些不在 JSONresponse2 中的项目。所以像这样:

for item in JSONResponse2.enumerated() {
    for var items in JSONresponse1 {
        if item.element["id"] == items["id"] {
            let address_correct = item.element["address"] as! String
            items["address"] = address_correct
            self.finalDictionary.append(items)
        }
    }
}
for item in JSONResponse1 {
    if !(JSONresponse2.contains { (item2) -> Bool in
        return item["id"] == item2["id"]
    }) {
        self.finalDictionary2.append(item)
    }
}

相关内容

  • 没有找到相关文章

最新更新