arrays - Swift 数组中的负索引
问题描述
让数组中的第一个索引从负数而不是 0 开始是否可能且容易?
如果是这样,我将如何定义以下内容,以便这些从 -1 而不是 0 开始?以及如何访问该值?
var myIntArray:[Int] = [4, 2, 1]
var myDoubleArray:[Double] = [28, 28, 14]
var myCGFloatArray:[CGFloat] = [0.14, 0.14, 0.1]
解决方案
您可以为此定义自定义下标:
extension Array {
private var customIndexOffset: Int { return -1 }
subscript(customIndex index: Int) -> Element {
get {
return self[index - customIndexOffset]
}
set {
self[index - customIndexOffset] = newValue
}
}
}
现在myIntArray[customIndex: -1]
== myIntArray[0]
- 更通用、更广泛的覆盖范围:
extension MutableCollection where Index == Int {
private var customIndexOffset: Int { -2 }
subscript(customIndex index: Int) -> Element {
get { self[index - customIndexOffset] }
set { self[index - customIndexOffset] = newValue }
}
}
extension Collection where Index == Int {
private var customIndexOffset: Int { -2 }
subscript(customIndex index: Int) -> Element { self[index - customIndexOffset] }
}
推荐阅读
- c - 如何将八进制转换为十六进制?
- typescript - 我可以将 InterleavedBufferAttribute 用于索引吗?
- javascript - XMLHttpRequest 事件侦听器不在 Edge 上工作
- perl - 无法打开 perl 脚本“Build.PL”:没有响应 perl Build.PL 的此类文件或目录
- angular - 如何使用 JHipster 的过滤器管道?
- javascript - JavaScript 并发更新数组
- c# - Windows 7 复制问题
- javascript - 碰撞后,每次碰撞我的分数被添加超过 1
- sql - 通过子查询自加入表 - 在 SELECT 子句中 (Spark SQL)
- nginx - Nginx 重写不适用于 Wordpress