使用循环填充多维数组

时间:2017-02-14 13:31:45

标签: swift for-loop multidimensional-array

我试图使用以下代码填充多维数组:

 var array = [[Int]]()
        for i in 0...3 {
            for j in 0...3{
                array[i][j] = i + j    <<- Error
            }

        }

但是我收到了一个错误:

fatal error: Index out of range

我做错了什么?

2 个答案:

答案 0 :(得分:3)

[[Int]]不是多维数组。它是一个数组数组。那是一个非常不同的事情。例如,在数组数组中,每行可能具有不同数量的列。将嵌套数组用作多维数组通常是个坏主意,尤其是可变数组。修改通常非常低效,因为每次更改它都会导致大量复制。

Swift没有多维数组类型。如果你真的需要一个,你通常必须自己构建它,或者重新设计以避免它。如果它足够小,而且变化不大,那不是什么大不了的事,但不要让它们变大。

也就是说,问题是元素[0][0]不存在,因为你没有创建它。在使用之前,您需要以这种方式初始化数组:

var array = Array(repeating: Array(repeating: 0, count: 4), count: 4)

这将创建一个包含4个零的4个数组的数组。

如果您特别想要描述的布局,可能更好的方法是映射,这可能会更有效(因为它不会继续修改嵌套数组):

let array = (0...3).map { i in
    (0...3).map { j in
        return i + j
    }
}

答案 1 :(得分:2)

调用array[i][j]用于已存在的元素。你不能用它来初始化数组,因为目前它只是一个空数组。您应该使用.append代替。请记住,这实际上并不像Rob Napier所说的多维数组,但它在这种情况下实现了相同的目标。尝试这样的事情:

var array = [[Int]]()
for i in 0...3 {

    var subArray = [Int]()
    for j in 0...3 {
        subArray.append(i + j)
    }

    array.append(subArray)
}

打印:

  

[[0,1,2,3],[1,2,3,4],[2,3,4,5],[3,4,5,6]]

同样,可能不是最好的方法,但这就是你如何在Swift中做到的。