在 Swift 中迭代字典

2023-11-24

我对 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,最后在“Square”中设置为 25,总共产生 8 次。

我是否遗漏了一些完全明显的东西?


Swift(和其他语言)中的字典没有顺序。当您迭代字典时,不能保证顺序与初始化顺序匹配。在此示例中,Swift 在其他键之前处理“Square”键。您可以通过向循环添加 print 语句来看到这一点。 25 是 Square 的第 5 个元素,因此 Square 中的 5 个元素的最大值将被设置 5 次,然后保持在 25。

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 {
    println("kind: \(kind)")
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
largest

这打印:

kind: Square
kind: Prime
kind: Fibonacci
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Swift 中迭代字典 的相关文章

随机推荐