考虑到某个情况在统计上比其他情况更有可能,如果将该“情况”放在 Switch 语句的第一位,执行速度会更快吗?
从逻辑上来说应该是这样,但我一直在运行一些基准测试,但我看不出有多大区别。 Switch/Case 是利用“案例”比其他案例更有可能这一事实的最佳方式吗?
最佳答案
这很容易测试:
struct MyInteger {
let value: Int
}
func ~=(a: Int, b: MyInteger) -> Bool {
println("Evaluating pattern \(a)")
return (a == b.value)
}
for i in 0...3 {
let number = MyInteger(value: i)
switch (number) {
case 0:
println("Case 0")
case 1:
println("Case 1")
case 2:
println("Case 2")
default:
println("Default branch")
}
}
输出为
Evaluating pattern 0
Case 0
Evaluating pattern 0
Evaluating pattern 1
Case 1
Evaluating pattern 0
Evaluating pattern 1
Evaluating pattern 2
Case 2
Evaluating pattern 0
Evaluating pattern 1
Evaluating pattern 2
Default branch
因此,case
语句的顺序很重要,并且只有在我们找到一个计算结果为 true
时才会对它们进行求值。
这也是为什么 default
语句必须始终是最后一个的原因(这在 Java 或 C 等语言中并不强制执行,其中 switch
只是一个跳转表) .
每个 case
都是对模式匹配函数 ~=
(或多个)的调用。
关于swift - Switch 语句中 Case 的顺序对 Swift 中的执行速度有影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25006955/