首页 > 解决方案 > 安全处理超出范围异常的性能?

问题描述

有一个扩展Collection允许安全访问元素而无需每次都检查。这是我的扩展的样子:

extension Collection {

    subscript(safe index: Index) -> Element? {
        indices.contains(index) ? self[index] : nil
    }
}

的时间复杂度indices.contains(index)O(n)一个艰难的权衡。有没有办法做到这一点O(1)

标签: swift

解决方案


这是 O(1) 任何时候.contains都是 O(1)。例如, Array.Indices 是一个 Range,并且Range.contains是 O(1)。原则上,这不能比contains. 但是您可以做的是创建一个协议 SafeCollection,使其成为默认实现,然后为需要它的集合提供自定义实现。


推荐阅读