我懷疑你可能誤解了關於數字鍵的建議。
首先,我們退後一步。我假設你原來的字典如下,你試圖解決這一問題,該命令是不保留:
let animals = ["Cat": 1, "Dog": 10, "Aye-Aye": 98]
而且我懷疑你讀了其他答案,並得出結論,你需要將其轉換成:
let animalNumbers = [[1: ["Cat": 1]], [2: ["Dog": 10]], [3: ["Aye-Aye": 98]]]
這是一個嵌套字典數組,每個字典都有一個數字鍵。但這沒有道理。你正在解決問題兩次。它是一個有序的字典數組,然後數字鍵也提供了以某種特定順序檢索值的機制。這是多餘的。
數字鍵的想法是讓一個字典的鍵是一個數值,其值是它們自己的字典。如果你要做到這一點,它比你有什麼有更簡單的,而是僅僅:
let animalNumbers = [0: ["Cat": 1], 1: ["Dog": 10], 2: ["Aye-Aye": 98]]
請注意,這是用數字鍵,[Int: [String: Int]]
字典。無論如何,一旦你有一個字典,你可以那麼理論上這樣做:
for i in 0 ..< animalNumbers.count {
for (name, value) in animalNumbers[i]! {
print(name, value)
}
}
但是,一逆向工程什麼,我懷疑對方的回答是在暗示,我應該說,這真的不是一個很好的模式。如果你想插入值,你必須經歷重建所有這些數字鍵的噩夢。
相反,只是用字典的簡單數組,[[String: Int]]
,這是有序的,但消除與手動構造數字鍵引進了不少問題:
let animals = [["Cat": 1], ["Dog": 10], ["Aye-Aye": 98]]
然後,您可以:
for dictionary in animals {
for (name, value) in dictionary {
print(name, value)
}
}
最後,更好的是,您不應該處理字典數組,而是處理一組自定義類型:
struct Animal {
let name: String
let value: Int
}
let animals = [
Animal(name: "Cat", value: 1),
Animal(name: "Dog", value: 10),
Animal(name: "Aye-Aye", value: 98)
]
現在你正在處理[Animal]
類型,你可以:
for animal in animals {
print(animal.name, animal.value)
}
我認爲你的回答基本上已經清除了我的想法,但我還沒有達到結構的東西,當我這樣做時,我會回顧你的問題。如果遇到有關此問題的任何信息,我會在此發佈任何進一步問題,再次感謝您的完美答覆。 – zhuqh93