对于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).然后,它应该跳过"斐波那契"中的任何数字,因为这些数字都小于最大的数字,而最大的数字当前从"素数"设置为13.然后,它应该设置为16,最后在"Square"中设置为25,总共产生8次.

我是不是错过了一些显而易见的东西?

推荐答案

Swift(和其他语言)的字典不需要订购.在遍历字典时,不能保证顺序与初始化顺序匹配.在本例中,Swift先处理"方形"键.您可以通过向循环中添加print语句来看到这一点.25是正方形的第五个元素,所以最大值将被设置为正方形中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

Swift相关问答推荐

是否可以将字典项绑定到文本字段?

数据不会被ARC删除在swift'

对多个项目的数组进行排序

";async let和";async之间的差异让我们等待";

按Esc键时执行操作(工作表)

SWIFT中MAP的静态方法包装器

如何为任务扩展的泛型静态函数获得自动类型推理

如何在DATE()中进行比较

以编程方式使UIView居中,而不影响UIKit中其他UI类的位置

在 RealityKit 中查找特定模型的 findEntity(named:) 方法的替代方法?

使第二个视图变灰 SwiftUI

如何从 Swift 中隐藏 Objective-C 类接口的一部分?

NavigationStack 和 TabView - 工具栏和标题不显示

SwiftUI 分段 Select 器的问题

关联满足约束时的快速协议方法

找不到目标AAA的 SPM 工件 - 仅限 Xcode 13.3

iOS:检测设备是否为 iPhone X 系列(无框)

如何在 Swift 中将 UILabel 居中?

Alamofire:如何全局处理错误

如何在 Swift 中从字符串创建类的实例