Swift 使用循环填充多维数组

Swift 使用循环填充多维数组,swift,for-loop,multidimensional-array,Swift,For Loop,Multidimensional Array,我试图用以下代码填充多维数组: var array = [[Int]]() for i in 0...3 { for j in 0...3{ array[i][j] = i + j <<- Error } } 我做错了什么?[[Int]]不是多维数组。它是一个数组数组。那是完全不同的事情。例如,在数组数组中,每一行可能有不同数量的列。通常,将嵌套数组用作多维数组

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

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

        }
我做错了什么?

[[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
    }
}
[[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
    }
}
调用数组[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中可以做到的。

调用数组[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中可以做到的。

谢谢您的解释。谢谢您的解释。谢谢。很好,谢谢你。很好用