ios - 在 Swift 中迭代字典
问题描述
我正在尝试遍历这本字典
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)
但我收到这种类型的错误:error: cannot call value of non-function type '[String : [Int]]'
我不知道我在哪里错过了正确的迭代。任何帮助请。谢谢
解决方案
您的代码有几个问题。
首先,您有一个额外的循环 -for name in names
遍历Dictionary
键的每个字符。最外层for ... in interestingNumbers
已经返回了字典的键值对。
您只需遍历numbers
查找每个数组的最大元素,然后将正确的数字和键 ( name
) 分配给您的变量。
for (name, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
largestName = name
}
}
}
但是,最好使用函数式编程,首先使用 找到每个数组compactMap
的最大值,然后使用 找到每个键值对的最大值max(by:)
let largestNumbers = interestingNumbers.compactMap { pair -> (String, Int)? in
guard let max = pair.value.max() else { return nil }
return (pair.key, max)
}
let largest = largestNumbers.max(by: { $0.1 < $1.1 })
largest // ("Square", 25)
推荐阅读
- javascript - 从同一个模块多次导入有什么影响?
- ruby-on-rails - rails will_save_change_to 奇怪的行为
- python - 如何在熊猫中正确导入以 00 为前缀的数字数据?
- python - scipy interpolate griddata 极坐标的问题
- php - 在 WordPress 页面模板的 If/Else 语句中发布缩略图 PHP?
- java - 由于 selenium java 中的弹出窗口和 iframe 而遇到麻烦
- javascript - 如何在 webpack 中捆绑动态文件路径?
- vba - 验证 ParamArray 是否包含正确类型的参数
- java - java - 如何跨多个类传递相同的对象?
- regex - 如何替换记事本++中文件的前8个字符?