我是Swift的新手,目前正在练习一些基础知识,当我试图弄清为什么字典内容不排序时,我从某人的帖子中找到了答案,解决方案是在其前面添加一个索引,如下所示:
[Int [String,String]]
当我尝试测试时,出现错误
expression type '[Dictionary<Int, Dictionary<String, Int>>]' is ambiguous without more context
不知道出了什么问题,所以我只显示代码并寻求帮助。
var animalNumbers = [[1: ["Cat": 1]], [2: ["Dog": 10]], [3: ["Aye-Aye": 98]]]
for (key, (animal, num)) in animalNumbers {
print ("\(animal) = \(num)")
}
我怀疑您可能误解了有关数字键的建议。
首先,让我们退后一步。我假设您的原始字典如下,并且您正在尝试解决未保留订单的问题:
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)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句