我有一个字典数组,作为对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)
}
}