我正试着翻阅这本字典
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
我想要跟踪这本字典中最大的数字,以及与这个数字对应的键的名称
下面是我的代码:
var largest = 0
var largestName: String?
for (names, numbers) in interestingNumbers {
for number in numbers {
for name in names {
if number > largest {
largest = number
largestName = interestingNumbers(forKey: largest)
}
}
}
}
print(largest)
print(largestName)
但我得到了以下类型的错误:错误:无法调用非函数类型“[String:[Int]]”
的值
我不知道我在哪里错过了适当的迭代。请帮忙。谢谢
如果您直接在外部循环中添加名称
和数字
的打印,您将意识到不需要像您这样循环名称
并且也没有必要在循环中再次尝试使用字典。
因此我们可以跳过一个循环,直接使用names
变量来记住最大值数组的名称。此外,也没有理由循环numbers
数组,因为数组有一个max()
函数可以使用。
因此代码变成
for (names, numbers) in interestingNumbers {
if let max = numbers.max(), max > largest {
largest = max
largestName = names
}
}
一种更简单的方法是使用一些高阶函数来获得最大值
interestingNumbers.mapValues({ $0.max() ?? 0 }).max(by: { $0.value < $1.value})
这将返回一个元组,可以这样使用
if let tuple = interestingNumbers.mapValues({ $0.max() ?? 0 }).max(by: { $0.value < $1.value}) {
largest = tuple.1
largestName = tuple.0
}