gpt4 book ai didi

Swift 表达式错误(在没有更多上下文的情况下模棱两可)

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:37 25 4
gpt4 key购买 nike

我是 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)
}

关于Swift 表达式错误(在没有更多上下文的情况下模棱两可),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45668494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com