我有两个字典数组:
Dict 1 =
[{"id":"100", "name":"Matt", "phone":"0404040404", "address":"TBC"}
,{"id":"110", "name":"Sean", "phone":"0404040404", "address":"TBC"}
, {"id":"120", "name":"Luke", "phone":"0404040404", "address":"TBC"}]
Dict 2 =
[{"id":"100", "address":"1 Main Street"}
,{"id":"110", "address":"2 Main Road"}
, {"id":"120", "address":"3 Main Street"}]
我想比较Dict 2中每个字典的密钥:值对, id 与Dict 1,如果id匹配,则从Dict2中的值更新Dict 1中的相应地址 .
所以 desired output 应该是:
Dict 1 =
[{"id":"100", "name":"Matt", "phone":"0404040404", "address":"1 Main Street"}
,{"id":"110", "name":"Sean", "phone":"0404040404", "address":"2 Main Road"}
, {"id":"120", "name":"Luke", "phone":"0404040404", "address":"3 Main Street"}]
EDIT
根据要求,这里有关于我如何解析数据的更多信息 . 我得到Dict1和Dict2作为对HTTP URL调用btw的响应 . 而且,我在解析时使用[Dictionary]类型的字典 .
let Task1 = URLSession.shared.dataTask(with: URL!) { (Data, response, error) in
if error != nil {
print(error)
} else {
if let DataContent = Data {
do {
let JSONresponse1 = try JSONSerialization.jsonObject(with: DataContent, options: JSONSerialization.ReadingOptions.mutableContainers)
print(JSONresponse1)
for item in JSONresponse1 as! [Dictionary<String, Any>] {
//Parse here
}
}
catch { }
DispatchQueue.main.async(execute: {
self.getAddressTask()
})
}
}
}
Task1.resume()
}
JSONResponse1是Dict 1
然后在上面调用的getAddressTask()函数内部,我进行HTTP URL调用以获取Dict 2
let AddressTask = URLSession.shared.dataTask(with: URL2!) { (Data, response, error) in
if error != nil {
print(error)
} else {
if let DataContent = Data {
do {
let JSONresponse2 = try JSONSerialization.jsonObject(with: timeRestrictionsDataContent, options: JSONSerialization.ReadingOptions.mutableContainers)
print(JSONresponse2)
for item in JSONresponse2 as! [Dictionary<String, Any>] {
//Parse here
}
catch { }
self.compileDictionaries()
}
}
}
AddressTask.resume()
JSONResponse2是Dict2
在compileDictionaries()里面我想得到 desired output as shown above.
1 回答
您应该使用Codable协议构建数据并创建一个更改联系人的变异方法 . 如果您需要更新联系人数组,只需更新所有联系人,即可使用JSONEncoder对联系人进行编码:
游乐场测试:
这将打印: