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

2020-10-09  本文已影响0人  Zafir_zzf

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

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

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

RandomAccessCollection

上一篇下一篇

猜你喜欢

热点阅读