swift - 使用循环填充多维数组

标签 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

我做错了什么?

最佳答案

[[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
    }
}

关于swift - 使用循环填充多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42227502/

相关文章:

macos - 有什么方法可以使用 Swift 在 Mac OS 中捕获全局按键

swift - 将 UInt32 数组编码到 UInt8 的正确方法

json - 如何在 swift 中进行安全的 json 解析?

ios - SwiftUI 模态演示仅在 navigationBarItems 中有效

php - 如何从多维数组中获取具有特定键/值对的特定数组

java - 如何将 parseInt 数组传递给上一个数组?

java - 这个打印矩阵的程序哪里出错了?

java - for 语句不循环 - android

c - 我不明白我的代码中发生了什么

mysql - 如何使用python循环创建多个sql表