首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3d数组创建

Swift 3d数组创建
EN

Stack Overflow用户
提问于 2016-07-10 17:58:43
回答 2查看 5.1K关注 0票数 2

我想要创建一个三维数组。数组将是5*5*无限(最后一个或最内部的数组可能具有类似于3-5对象的字符串类型)。

我试过这样的方法:

代码语言:javascript
复制
var array3D = [[[String]]]()

并试图添加这样的新字符串

代码语言:javascript
复制
array3D[ii][yy] += y.components(separatedBy: ";")

但在添加新数组或字符串时遇到了问题。并得到了exc坏指令的错误。

在学校,我每天有5节课。所以每周有25节课,我想制作一个代表我时间表的iPhone应用程序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-10 20:16:28

多维数组只是数组的数组。当你说

代码语言:javascript
复制
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:)轻松地创建它们。

代码语言:javascript
复制
let array3D = [[[String]]](count: 5, repeatedValue:
    [[String]](count: 5, repeatedValue: []))

(在这里,最内部的数组是空的,因为似乎您计划始终在后面填充by。)

但是,您的用例也需要一个相当稀疏的数据结构。如果大多数数组都是空的,为什么要创建所有这些数组?数据结构可以使您将索引元素的方式与元素的存储方式分离开来,这样可以更好地为您提供服务。

例如,您可以使用字典,其中每个键都是一些表示(天、课、索引)组合的值。这样,没有任何东西的(日、课、索引)组合就不需要考虑了。您甚至可以通过定义您自己的类型并给它一个下标操作符(在appzYourLife的答案中提到),将组合键的编码封装成一个很好的抽象。

票数 3
EN

Stack Overflow用户

发布于 2016-07-10 18:17:47

我稍微修改了Swift编程语言提供的矩阵结构

代码语言:javascript
复制
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
        }
    }
}

用法

现在你可以写了

代码语言:javascript
复制
var data = Matrix<String>(rows: 5, columns: 5)
data[0, 0] = ["Hello", "World"]
data[0, 0][0] // Hello
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38294893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档