数组中的Swift负索引
发布时间:2020-12-14 02:29:08 所属栏目:百科 来源:网络整理
导读:是否有可能覆盖 Swift的默认数组下标,以便它处理像 Python这样的负面索引? 例如,a [-1]应该返回a的最后一个元素,并且[-2]应该返回它之前的元素. 这应该可以通过扩展Array类型来实现,唉,下面的代码将无法工作,因为它会无限循环: extension Array { subscrip
是否有可能覆盖
Swift的默认数组下标,以便它处理像
Python这样的负面索引?
例如,a [-1]应该返回a的最后一个元素,并且[-2]应该返回它之前的元素. 这应该可以通过扩展Array类型来实现,唉,下面的代码将无法工作,因为它会无限循环: extension Array { subscript (index:Int) -> [Element] { return (index < 0) ? self[self.count+index] : self[index] } } 覆盖那些根本性的东西的想法有多糟糕?
实际上,这是一个相对良好的实践,Swifty方法:标记参数.
extension CollectionType where Index : BidirectionalIndexType { subscript(back i: Index.Distance) -> Generator.Element { return self[endIndex.advancedBy(-i)] } } let ar = [1,2,3,4] ar[back: 1] // 4 ar[back: 2] // 3 你可以很容易地改变语义.例如,这个实现要求索引大于0.更改它以使0返回最后一个元素就像:self [endIndex.predecessor().advancedBy(-i)],或者,如果你想假设index为负向:self [endIndex.advancedBy(-i)]. 标记论证的优点是它很清楚,没有人会偶然使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |