[英]Swift - best way to handle a dictionary of dictionaries?
我有很多人都有最喜歡的書的清單。 每本書都有幾個屬性,例如書名,書說明,書作者。
我要做的是創建詞典字典,以便能夠訪問特定的人,然后訪問該人的每本書,並從中提取書名,書名作者等。
目前我正在做的是像這樣聲明一個字典:
var dictToHoldBooKValue = [String : [String : AnyObject]]()
第一個String是鍵,我將創建該鍵作為人的名字,第二個pard是字典,它將具有string類型的鍵(我將其設置為書籍屬性名稱,例如“ book Title”或“本書作者”,而任何對象都是該鍵的值。
例子:我這樣修改字典:
dictToHoldBooKValue["Mark"] = ["book Title" : (bookTitle as? String)]
但是,這種方法似乎不起作用,因為“ Mark”有他喜歡的幾本書,因此當我打印字典數時,它只顯示一本。 另外,我也不知道如何使用這個dict來獲得書作者屬性或任何其他屬性。
有人知道更優雅的解決方案嗎?
謝謝!
制作一個代表書的結構。 使它包含您要跟蹤的所有書籍屬性。
struct Book {
var title: String
var author: String
var year: Int
}
您的外部詞典將與您所描述的完全相同。
您的內部字典將其鍵作為書的名稱,並將包含Book結構。
var dictToHoldBooKValue = [String : [String : Book]]()
dictToHoldBooKValue["Mark"] = [
"You Only Live Twice" : Book("You Only Live Twice", "Ian Flemming", 1961),
"Casino Royale" : Book("Casino Royale", "Ian Flemming", 1959)
]
像這樣訪問它:
print(dictToHoldBooKValue["Mark"]["You Only Live Twice"].author)
如果您要從某個地方加載此數據並希望以特定方式顯示它,那么就很好。 如果需要以更靈活的方式查詢數據,則應考慮使用CoreData。
如果要使用鍵值編碼,則可以使用類型別名來簡化代碼:
typealias Book = [String: AnyObject]
typealias Books = [Book]
typealias Person = [String: AnyObject]
var people = [Person]()
var mark = Person()
var marksBooks = Books()
var theLittlePrince = [
"title" : "The Little Prince",
"author": "Antoine de Saint-Exupéry"
]
marksBooks.append(theLittlePrince)
mark["books"] = marksBooks
people.append(mark)
print(people)
印刷品:
[["books": (
{
author = "Antoine de Saint-Exup\U00e9ry";
title = "The Little Prince";
}
)]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.