附加数组时2D数组Swift越界

时间:2018-09-25 13:29:03

标签: arrays swift multidimensional-array

我想将一个2D数组中的元素追加到另一个2D数组中,但是我得到了致命错误索引。

代码如下:

 var array  =  [["a", "b", "c"], ["d","e","f"],["g","h","i"]]

var array2 = [[String]]()
var x = array.count
var y = array[1].count

for j in 0..<x {
    for i in 0..<y {
        array2[j].append(array[j][i])
    }
}
print(array2)

请不要告诉我只复制数组,因为这不是我所需要的,我正在使用此过程来做比仅复制数组还要复杂的事情。

关于它为何超出范围的任何建议?

谢谢

2 个答案:

答案 0 :(得分:1)

array2[j]不存在,因为它只是一个空数组。

这样做会容易得多:

var array  =  [["a", "b", "c"], ["d","e","f"],["g","h","i"]]

var array2 = [[String]]()
for item in array {
    array2.append(item)
}
print(array2)
  

[[[“ a”,“ b”,“ c”],[“ d”,“ e”,“ f”],[“ g”,“ h”,“ i”]]

但这只是复制数组。您应该提供一个更精确的示例,说明您要实现的目标。

另一种选择(这可以使您当前的代码起作用)是在第一个循环中创建一个“行”以供插入:

var array  =  [["a", "b", "c"], ["d","e","f"],["g","h","i"]]

var array2 = [[String]]()
var x = array.count
var y = array[1].count

for j in 0..<x {
    array2.append([String]())
    for i in 0..<y {
        array2[j].append(array[j][i])
    }
}
print(array2)

哪个给出相同的输出:

  

[[[“ a”,“ b”,“ c”],[“ d”,“ e”,“ f”],[“ g”,“ h”,“ i”]]

答案 1 :(得分:0)

由于array2[0]不存在,因此超出了范围。您需要在此处创建一个空数组,然后再附加到该数组。然后将该数组附加到外部数组。

var array  =  [["a", "b", "c"], ["d","e","f"],["g","h","i"]]
var array2 = [[String]]()

for j in 0..<array.count {
    var stringArray: [String] = []
    for i in 0..<array[j].count {
        stringArray.append(array[j][i])
    }
    array2.append(stringArray)
}
print(array2)