swift - switch 性能优于枚举情况 O(1)

标签 swift performance enums

我无法找到有关所有枚举情况下 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 代码:

enter image description here

不要迷失在该代码中,但请注意,将 rdx 的内容设置为与特定 case 关联的代码的地址的指令很少>:

enter image description here

这里的细节并不真正相关,但关键是,在我的 1,000 种情况的枚举中,它并没有经过 1,000 次测试,而是通过该枚举中的索引计算出地址,然后跳转到相关代码。


综上所述,枚举通常没有足够的情况来观察 switch 语句的复杂性。如果确实有数千(或数百万)种不同的情况,代码中还会存在许多其他问题,因此 switch 语句的复杂性将是您最后关心的问题,即使它不是 O(1) .

关于swift - switch 性能优于枚举情况 O(1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466074/

相关文章:

python - 使用列和行索引函数填充数据帧缺失元素的最有效方法

performance - Mongodb - 在内存中创建或使用缓存

java - 在枚举中使用 compareTo

xcode - Swift 编程语言枚举实验

xcode - 链接器错误(Clang)

ios - 使用 frame.origin.y 无法在 scrollview 中找到元素的 y 位置

ios - 想要按钮吞下所有的触摸

swift - 从 Realm 数据库读取数据 (Swift)

c++ - 如何为性能设计对象

c# - '^' 在 c#(枚举)中做什么?