美文网首页
Swift标准库源码之旅 -其它集合协议

Swift标准库源码之旅 -其它集合协议

作者: Zafir_zzf | 来源:发表于2020-10-09 18:50 被阅读0次

    BidirectionalCollection

    A collection that supports backward as well as forward traversal.

    一种支持使用索引进行向后遍历的集合,当然也支持向前遍历

    Collection协议里只要求实现索引如何向前移动

    func index(after i: Index) -> Index
    func formIndex(after i: inout Index)
    

    我们如果想要取此集合的最后一个值那只能是从头遍历到尾.有一些数据结构确实也只支持这样的形式.

    如果要想支持双向遍历需要另外实现以下方法

    func index(before i: Index) -> Index
    

    支持反向遍历会给我们带来什么好处呢

    • 常量级时间复杂度的var last: Element?
    • 通过reversed方法得到一个遍历行为逆序的新集合ReversedCollection

    话说, 我们取一个集合的最后一个元素直接使用endIndex - 1不就可以了吗? 针对索引类型Index为Int的可以这样做, 但是对于字典/Set/String这三种常用的集合类型其实Index类型都不是Int. 而Index类型如果是Int就可以说明集合是支持随机访问的了.这是RandomAccessCollection协议所定义的能力.

    RandomAccessCollection

    相关文章

      网友评论

          本文标题:Swift标准库源码之旅 -其它集合协议

          本文链接:https://www.haomeiwen.com/subject/bfmlpktx.html