Swift 3 Int 二维数组
Swift 3 2d array of Int
其实是个很简单的问题,但是一个小时后我还是无法解决我的问题。
我需要创建一个 Int 的二维数组。
var arr = [[Int]]()
or
var arr : [[Int]] = []
试图更改值:
arr[x][y] = 1
致命错误:索引超出范围
我应该使用 APPEND 还是需要指定数组的大小?
我很困惑..
真的不简单。该行:
var arr : [[Int]] = []
创建一个类型为 Array of Array of Int
的变量,最初数组为空。您需要像 Swift.
中的任何其他数组一样填充它
让我们回到单个数组:
var row : [Int] = []
你现在有一个空数组。你不能只做:
row[6] = 10
您首先必须向数组添加 7 个值,然后才能访问索引 6
处的值(第 7 个值)。
对于你的数组数组,你需要用一整套内部数组来填充外部数组。并且每个内部数组都需要填充适当数量的值。
假设您想要一个每个值都设置为 0 的预填充矩阵,这是初始化数组数组的一种简单方法。
var matrix : [[Int]] = Array(repeating: Array(repeating: 0, count: 10), count: 10)
外部计数表示行数,内部计数表示列数。根据需要进行调整。
现在您可以访问矩阵中的任何单元格:
matrix[x][y] = 1 // where x and y are from 0 to rows-1/columns-1
不仅需要初始化数组和子数组才能赋值,而且每个数组长度必须大于您尝试设置的索引位置。
这是因为 Swift 既不为您初始化子数组,也不在分配给索引时增加数组长度。
例如,以下代码将失败:
var a = [Int]()
a[0] = 1
// fatal error: Index out of range
相反,您可以使用要保存的元素数初始化一个数组,并用默认值填充它,例如零:
var a = Array(repeating: 0, count: 100)
a[0] = 1
// a == [1, 0, 0, 0...]
要创建一个 100 x 100 的矩阵并初始化为 0 值:
var a = Array(repeating: Array(repeating: 0, count: 100), count: 100)
a[0][0] = 1
如果您不想指定矩阵的初始大小,您可以这样做:
var a = [[Int]]()
a.append([])
a[0].append(1)
其实是个很简单的问题,但是一个小时后我还是无法解决我的问题。
我需要创建一个 Int 的二维数组。
var arr = [[Int]]()
or
var arr : [[Int]] = []
试图更改值:
arr[x][y] = 1
致命错误:索引超出范围
我应该使用 APPEND 还是需要指定数组的大小?
我很困惑..
真的不简单。该行:
var arr : [[Int]] = []
创建一个类型为 Array of Array of Int
的变量,最初数组为空。您需要像 Swift.
让我们回到单个数组:
var row : [Int] = []
你现在有一个空数组。你不能只做:
row[6] = 10
您首先必须向数组添加 7 个值,然后才能访问索引 6
处的值(第 7 个值)。
对于你的数组数组,你需要用一整套内部数组来填充外部数组。并且每个内部数组都需要填充适当数量的值。
假设您想要一个每个值都设置为 0 的预填充矩阵,这是初始化数组数组的一种简单方法。
var matrix : [[Int]] = Array(repeating: Array(repeating: 0, count: 10), count: 10)
外部计数表示行数,内部计数表示列数。根据需要进行调整。
现在您可以访问矩阵中的任何单元格:
matrix[x][y] = 1 // where x and y are from 0 to rows-1/columns-1
不仅需要初始化数组和子数组才能赋值,而且每个数组长度必须大于您尝试设置的索引位置。
这是因为 Swift 既不为您初始化子数组,也不在分配给索引时增加数组长度。
例如,以下代码将失败:
var a = [Int]()
a[0] = 1
// fatal error: Index out of range
相反,您可以使用要保存的元素数初始化一个数组,并用默认值填充它,例如零:
var a = Array(repeating: 0, count: 100)
a[0] = 1
// a == [1, 0, 0, 0...]
要创建一个 100 x 100 的矩阵并初始化为 0 值:
var a = Array(repeating: Array(repeating: 0, count: 100), count: 100)
a[0][0] = 1
如果您不想指定矩阵的初始大小,您可以这样做:
var a = [[Int]]()
a.append([])
a[0].append(1)