我想要创建一个三维数组。数组将是5*5*无限(最后一个或最内部的数组可能具有类似于3-5对象的字符串类型)。
我试过这样的方法:
var array3D = [[[String]]]()并试图添加这样的新字符串
array3D[ii][yy] += y.components(separatedBy: ";")但在添加新数组或字符串时遇到了问题。并得到了exc坏指令的错误。
在学校,我每天有5节课。所以每周有25节课,我想制作一个代表我时间表的iPhone应用程序。
发布于 2016-07-10 20:16:28
多维数组只是数组的数组。当你说
var array3D = [[[String]]]()您所创建的是一个空数组,它期望添加到其中的值为[[String]]类型。但是这些内部数组还不存在(更不用说内部数组了)。不能分配给array3D[ii],因为ii超出了空数组的界限,不能分配给array3D[ii][yy],因为array3D[ii]不存在,也不能附加到array3D[ii][yy]中的数组,因为array3D[ii][yy]不存在。
由于您的外部和中间级别的数组大小是固定的(5乘5乘n),所以可以使用Array.init(count:repeatedValue:)轻松地创建它们。
let array3D = [[[String]]](count: 5, repeatedValue:
[[String]](count: 5, repeatedValue: []))(在这里,最内部的数组是空的,因为似乎您计划始终在后面填充by。)
但是,您的用例也需要一个相当稀疏的数据结构。如果大多数数组都是空的,为什么要创建所有这些数组?数据结构可以使您将索引元素的方式与元素的存储方式分离开来,这样可以更好地为您提供服务。
例如,您可以使用字典,其中每个键都是一些表示(天、课、索引)组合的值。这样,没有任何东西的(日、课、索引)组合就不需要考虑了。您甚至可以通过定义您自己的类型并给它一个下标操作符(在appzYourLife的答案中提到),将组合键的编码封装成一个很好的抽象。
发布于 2016-07-10 18:17:47
我稍微修改了Swift编程语言提供的矩阵结构
struct Matrix<ElementType> {
let rows: Int, columns: Int
var grid: [[ElementType]]
init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
grid = Array(count: rows * columns, repeatedValue: [])
}
func indexIsValidForRow(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
subscript(row: Int, column: Int) -> [ElementType] {
get {
assert(indexIsValidForRow(row, column: column), "Index out of range")
return grid[(row * columns) + column]
}
set {
assert(indexIsValidForRow(row, column: column), "Index out of range")
grid[(row * columns) + column] = newValue
}
}
}用法
现在你可以写了
var data = Matrix<String>(rows: 5, columns: 5)
data[0, 0] = ["Hello", "World"]
data[0, 0][0] // Hellohttps://stackoverflow.com/questions/38294893
复制相似问题