加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组中的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)].

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读