首页 > 解决方案 > 2D 数组 Swift 在追加数组时越界

问题描述

我想将一个二维数组中的元素附加到另一个二维数组,但我得到致命错误索引超出范围。

代码如下:

 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)

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

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

谢谢

标签: arraysswiftmultidimensional-array

解决方案


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”]]


推荐阅读