关于Xcode在Swift编程语言指南中给我这个实验的答案,我有点困惑:
// Use a for-in to iterate through a dictionary (experiment)
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
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
largest
据我所知,当字典被横向移动时,最大的数字被设置为变量 largest
. 但是,我很困惑为什么Xcode会说 largest
被设置5次,或1次,或3次,具体取决于每个测试 .
查看代码时,我发现它应该仅在“Prime”中设置6次(2,3,5,7,11,13) . 然后它应该跳过“Fibonacci”中的任何数字,因为它们都小于最大值,目前从“Prime”设置为13 . 然后,它应该设置为16,最后25“在”Square“中,总共产生8次 .
我错过了一些完全明显的东西吗
5 回答
这是一个用户定义的函数来迭代字典:
Swift(和其他语言)中的字典不是有序的 . 当您遍历字典时,没有任何保证订单将与初始化顺序匹配 . 在这个例子中,Swift在其他之前处理“Square”键 . 您可以通过向循环添加print语句来查看此内容 . 25是Square的第5个元素,因此对于Square中的5个元素,最大值将被设置为5次,然后将保持为25 .
这打印:
结果将是
(“FirstName”,“Maninder”)(“LastName”,“Singh”)(“地址”,“Chandigarh”)
这是该实验的替代方案(Swift 3.0) . 这可以告诉您哪种数字最大 .
数组是有序集合,但字典和集合是无序集合 . 因此,您无法预测字典或集合中的迭代顺序 .
阅读本文以了解有关Collection Types: Swift Programming Language的更多信息