我正在尝试从Swift中的单个数组(或更确切地说,从字符串数组数组,作为clarified in the accepted answer)中读取字符串变量。以下内容读取整个数组。
var array = [["W", "X", "Y", "Z"], ["A", "B", "C", "D"]]
print(array[0],array[1])
如何阅读一对变量,例如" X"和" D" ?
答案 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"]