如何更改数组的下标

时间:2018-10-22 09:04:19

标签: ios swift

我想更改数组[[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])
    }
}

}

1 个答案:

答案 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]之类的东西-这样您就可以通过字母访问行,而不仅限于列