微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数组中的Swift负索引

是否有可能覆盖 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)].

标记论证的优点是它很清楚,没有人会偶然使用它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐