多维下标
我们通常看到的下标操作都是一维的,不过如果有需要,我们可以定义多维的下标操作,如下代码所示:
// 定义一个三维结构体
struct Vector3D<T: Equatable> {
var x: T
var y: T
var z: T
}
// 向量数组
struct VectorArray<T: Equatable> {
var vectors: [Vector3D<T>] = []
init() {
}
mutating func append(vector: Vector3D<T>) {
vectors.append(vector)
}
// 此处是根据输入的x, y, z值来确定是否有对应的值,而不是索引
// 如果有,则返回该向量值;如果没有,返回nil
subscript(x: T, _ y: T, _ z: T) -> Vector3D<T>? {
for vector in vectors {
if vector.x == x && vector.y == y && vector.z == z {
return vector
}
}
return nil
}
}
var vectors = VectorArray<Int>()
vectors.append(vector: Vector3D(x: 0, y: 1, z: 2))
vectors.append(vector: Vector3D(x: 3, y: 4, z: 6))
vectors.append(vector: Vector3D(x: 8, y: 4, z: 8))
print(vectors[0, 0, 0]) // nil
print(vectors[3, 4, 6]) // Optional(__lldb_expr_167.Vector3D<Swift.Int>(x: 3, y: 4, z: 6))