我才刚刚开始学习Swift,也是ios开发的新手。
var bookArray:[String:[[String:String]]] = ["book1":[["bookid":"SCIENCE","viewed":"12"],["bookid":"MATHS","viewed":"25"]],"book2":[["bookid":"HISTORY","viewed":"10"]]]
我将获得输入作为外部字典键和内部字典键,需要检查和更新字典。
(即)
如果给定的外部字典键为“ book1”,内部字典键为“ MATHS”,则所需输出为
bookArray:[String:[[String:String]]] = ["book1":[["bookid":"SCIENCE","viewed":"12"],["bookid":"MATHS","viewed":"26"]],"book2":[["bookid":"HISTORY","viewed":"10"]]]
(观看次数增加)
如果给定的外部字典键为“ book1”,内部字典键为“ CHEMISTRY”,则所需输出为
bookArray:[String:[[String:String]]] = ["book1":[["bookid":"SCIENCE","viewed":"12"],["bookid":"MATHS","viewed":"25"],["bookid":"CHEMISTRY","viewed":"0"]],"book2":[["bookid":"HISTORY","viewed":"10"]]]
(要为给定的外键添加新的Bookid,且查看计数为零)
我开始工作,但是for
循环有很多并发症,而且混乱太多...
有人可以建议我更好的方法来完成结果吗?
答案 0 :(得分:0)
我建议为Book
创建一个结构
struct Book {
let bookID: String
let viewed: Int
}
并保存一个数组。将更易于管理。
您的数组将更改为:
var bookArray: [String:Book] = [Book(bookID: "SCIENCE", viewed: 12)]
您可以创建更多图书并将其添加到数组中
答案 1 :(得分:0)
也许以下代码可以帮助您获得最终答案。
var myDict : [String:[[String: String]]] = [:]
myDict = ["book1": [["bookid":"SCIENCE","viewed":"12"], ["bookid":"MATHS","viewed":"25"]], "book2":[["bookid":"HISTORY","viewed": "10"]]]
func updateKey(_ outKey: String, _ innerKey: String){
var array = myDict[outKey] ?? []
if let index = array.firstIndex(where: {$0["bookid"] == innerKey}){
array[index]["viewed"] = "\(Int(array[index]["viewed"]!)! + 1)"
}
else {
array += [["bookid":innerKey,"viewed":"0"]]
}
myDict[outKey] = array
}
updateKey("book1", "MATHS")
print(myDict)
// ["book2": [["viewed": "10", "bookid": "HISTORY"]], "book1": [["viewed": "12", "bookid": "SCIENCE"], ["viewed": "26", "bookid": "MATHS"]]]
updateKey("book1", "CHEMISTRY")
print(myDict)
//["book2": [["viewed": "10", "bookid": "HISTORY"]], "book1": [["viewed": "12", "bookid": "SCIENCE"], ["viewed": "26", "bookid": "MATHS"], ["viewed": "0", "bookid": "CHEMISTRY"]]]