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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容