我想更改数组[[Int]]中的下标坐标,以便能够以类似于电子表格的方式处理每个值,因此跨单元格分配值,公式等。
当前要处理每个值,我需要像表[2] [1] = 12或类似的下标。我想像电子表格表一样下标[a] [2] = 12,这样我就可以使用电子表格中使用的相同系统,将较大的表中的冗长而复杂的公式改编为类似的表格。
问题是:如何以有效的方式更改下标系统?我发了一个简化的例子来说明这一点
class ViewController: UIViewController {
var table = [[0, 1, 2, 3],
[1, 32, 44, 25],
[2, 12, 66, 43],
[3, 3, 4, 5]]
override func viewDidLoad() {
super.viewDidLoad()
print(table[2][1]) // 12
table[1][1] = 100
table[3][3] = table[1][1] * table[3][1] * 10
print(table[3][3])
printArray(table: table, j: 3)
}
// MARK: - Function
func printArray(table: [[Int]], j:Int) {
for i in 0...j {
print(table[i])
}
}
}
答案 0 :(得分:2)
我发现最接近的解决方案是使用枚举,例如:
enum Column:Int {
case a
case b
case c
// and so on
}
extension Array {
subscript(col:Column) -> Element {
get {
return self[col.rawValue]
}
set(newValue) {
self[col.rawValue] = newValue
}
}
}
var table = [[0, 1, 2, 3],
[1, 32, 44, 25],
[2, 12, 66, 43],
[3, 3, 4, 5]]
table[.a][2] = 12
let val = table[.a][2]
print (val)
但是,有两个小缺点:
Column
枚举的所有“列”字母进行硬编码。table[5][.c]
和table[.a][.b]
之类的东西-这样您就可以通过字母访问行,而不仅限于列