我无法找到有关所有枚举情况下 switch 语句性能的信息。假设您有 100 个案例。是O(1)吗?
enum MyEnum {
case one = 1
case two = 2
}
let myEnum = MyEnum.one
switch myEnum {
case .one: ...
case .two: ...
}
最佳答案
查看 switch
语句的汇编代码(“调试”»“调试工作流程”»“始终显示反汇编”),可以看到它的复杂度为 O(1)(至少在至少这个简单的例子)。例如,以下是 switch
代码:
不要迷失在该代码中,但请注意,将 rdx 的内容设置为与特定 case
关联的代码的地址的指令很少>:
这里的细节并不真正相关,但关键是,在我的 1,000 种情况的枚举中,它并没有经过 1,000 次测试,而是通过该枚举中的索引计算出地址,然后跳转到相关代码。
综上所述,枚举通常没有足够的情况来观察 switch
语句的复杂性。如果确实有数千(或数百万)种不同的情况,代码中还会存在许多其他问题,因此 switch 语句的复杂性将是您最后关心的问题,即使它不是 O(1) .
关于swift - switch 性能优于枚举情况 O(1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466074/