如何在Swift中访问2D数组中的元素

时间:2017-01-11 21:05:24

标签: arrays swift

我正在尝试从Swift中的单个数组(或更确切地说,从字符串数组数组,作为clarified in the accepted answer)中读取字符串变量。以下内容读取整个数组。

    var array = [["W", "X", "Y", "Z"], ["A", "B", "C", "D"]]
    print(array[0],array[1])

如何阅读一对变量,例如" X"和" D" ?

4 个答案:

答案 0 :(得分:6)

array是一个字符串数组。或者,输入Array<Array<String>>array[0]将返回数组的第一个元素,即字符串数组,或Array<String>。这意味着您必须访问该数组的另一个元素。一步一步,代码看起来像这样:

let array = [["W", "X", "Y", "Z"], ["A", "B", "C", "D"]]

let firstArray = array[0]  // ["W", "X", "Y", "Z"]
let X = firstArray[1]  // "X"

let secondArray = array[1]  // ["A", "B", "C", "D"]
let D = secondArray[3]  // "D" 

简短版本如下:

print(array[0][1], array[1][3])  // "X D"

答案 1 :(得分:5)

只提供第一级的索引,然后是第二级。

print(array[1][3])

您也可以通过这种方式迭代多个级别的数组

for subarray of array {
    for element of subarray {
        print(element)
    }
}

答案 2 :(得分:1)

array[0][0] // "W"
array[0][1] // "X"
array[0][2] // "Y"
array[1][0] // "A"

我想你现在明白了! ;)

PS:使用嵌套,你可以拥有:

for i in 0...3 {
    for j in 0...3 {
        print(array[i][j])
    }
}

答案 3 :(得分:1)

你可以zip一个索引数组(每个内部数组一个)和数组数组(array),并对这个压缩序列使用map调用来构造一个每个内部数组中包含一个元素的数组。 E.g。

let array = [["W", "X", "Y", "Z"], ["A", "B", "C", "D"]]
let innerIdxs = [1, 3]

let innerElements = zip(array, innerIdxs).map { $0[$1] }
print(innerElements) // ["X", "D"]

请注意,如果innerIdxs数组中的任何索引超过元素数量-1(在相应的内部数组中),这将导致运行时异常,因为索引超出范围。更安全的方法是在使用之前验证索引,例如:

let innerElements = zip(array, innerIdxs)
    .map { 0..<$0.count ~= $1 ? $0[$1] : "invalid index" }

在给出以下innerElements数组的几个示例的情况下,将产生以下innerIdxs

let innerIdxs = [4, 3] 
    // ... -> innerElements = ["invalid index", "D"]

let innerIdxs = [2, -1] 
    // ... -> innerElements = ["Y", "invalid index"]