Switch语句中案例的顺序是否会影响Swift中的执行速度?
假设一个案例在统计上比其他案例更可能发生,那么如果将该“案例”放在Switch语句的第一位,执行会更快吗 逻辑上应该是这样的,但我已经运行了一些基准测试,我看不出有什么不同。Switch语句中案例的顺序是否会影响Swift中的执行速度?,swift,Swift,假设一个案例在统计上比其他案例更可能发生,那么如果将该“案例”放在Switch语句的第一位,执行会更快吗 逻辑上应该是这样的,但我已经运行了一些基准测试,我看不出有什么不同。 开关/案例是利用“案例”比其他案例更可能的事实的最佳方式吗?这是一个非常简单的测试: struct MyInteger { let value: Int } func ~=(a: Int, b: MyInteger) -> Bool { println("Evaluating pattern \(a
开关/案例是利用“案例”比其他案例更可能的事实的最佳方式吗?这是一个非常简单的测试:
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
只是一个跳转表)
每个
案例
都是对模式匹配函数的调用~=
(或其中的多个)。这证明案例是按照编写顺序进行评估的:
func testing(a : Int)->Int{
println(a)
return a
}
let x = 2
switch x {
case testing(1) :
println("one")
case testing(2) :
println("two")
case testing(3) :
println("three")
case testing(4) :
println("four")
default:
println("Default")
}
这张照片是:
1
2
two
如果您想评估以下情况,那么如果您可以添加测试代码(甚至只是switch语句),那么可以使用关键字
fallthrough
,这可能有助于人们讨论它。