在所有枚举情况下,我都无法获得有关switch语句性能的信息。假设您有100箱。是O(1)吗?
enum MyEnum {
case one = 1
case two = 2
}
let myEnum = MyEnum.one
switch myEnum {
case .one: ...
case .two: ...
}
答案 0 :(得分:1)
查看switch
语句的汇编代码(“调试”»“调试工作流”»“始终显示反汇编”),可以看到它是O(1)(至少在这种简单情况下) , 至少)。例如,下面是switch
代码:
不要迷失于该代码中,但请注意,很少有指令将rdx
的内容设置为与该特定case
关联的代码的地址:
这里的细节并没有真正的意义,但是关键是在我的1,000个枚举的枚举中,它没有经过1,000次测试,而是通过从该枚举中的索引计算得出地址,然后跳转到相关代码。
所有这些,枚举通常没有足够多的情况,以至于无法观察到switch
语句的复杂性。而且如果您确实有成千上万(或数百万)个不同的案例,那么代码中还会有很多其他问题,以至于switch语句的复杂性将是您最后关心的问题,即使不是O(1)