【问题标题】:Adding Bool values to every element of matrix array (two dimensional array) in Swift在 Swift 中为矩阵数组(二维数组)的每个元素添加 Bool 值
【发布时间】:2020-10-21 11:18:23
【问题描述】:

我有一个代表迷宫每个坐标的二维数组:

var maze:[[Int]]

let column = [Int](repeating: 0, count: y)
self.maze = ([[Int]](repeating: column, count: x))

我需要为每个坐标分配 4 个 Bool 值:

canMoveUp = false
canMoveDown = false
canMoveLeft = false
canMoveRight = false

问题是我已经有很多使用maze:[[Int]] 编写的代码。有没有办法创建一个到达maze[[Int]] 的额外对象并将布尔值添加到它的每个元素而不影响原始迷宫变量?如果不是:只是一个为每个元素声明带有 Bool 值的二维数组的示例将非常有帮助。 我正处于开发人员职业生涯的初期,请放纵一下。非常感谢任何帮助!


【问题讨论】:

  • 每个元素都有它的 Int 值。我想保持原样并将 Bool 数据添加到元素中。就像拥有迷宫车的指纹,但有可能向其中添加另一种类型的数据

标签: ios arrays swift xcode multidimensional-array


【解决方案1】:

有没有办法创建一个额外的对象到达 maze[[Int]] 并将 bool 值添加到它的每个元素而不影响原始迷宫变量?

不可以。 Int 是基本类型,不能扩展。

可以在相应位置使用新数据创建第二个迷宫数组,但这是个糟糕的主意;试图让两个数据结构始终保持同步总是一件很痛苦的事情。

应该做的是重构您的代码,以便您为迷宫数据使用适当的类型,而不是您现在使用的单个Int。如果你做对了,你只需要做一次,从那时起,你就可以毫不费力地向迷宫中的每个单元格添加新数据。创建一个包含您当前需要的所有内容的数据结构,例如:

struct MazeElement {
    var up = false
    var down = false
    var left = false
    var right = false
    var count = 0
}

let columns = 4
let rows = 3
var maze = [[MazeElement]](repeating: [MazeElement](repeating:MazeElement(), count: rows), count: columns)

接下来,您将在您的代码中找到所有您希望 maze 成为 Int 的二维数组的位置,并更改每个位置以便它需要 MazeElement。在实践中,这主要意味着像这样的行:

let foo = maze[i][j]

需要改成:

let foo = maze[i][j].count

但好处是现在还可以轻松获取每个单元格的方向信息:

let canMoveUp = maze[i][j].up
let canMoveLeft = maze[i][j].left

更好的是,当您决定向每个元素添加一些新数据时,您不必重新做所有这些工作......只需更改 MazeElement 的定义以包含新数据:

struct MazeElement {
    var up = false
    var down = false
    var left = false
    var right = false
    var count = 0
    var color = UIColor.white
}

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2018-02-15
    • 2023-04-05
    • 2021-03-23
    • 2020-11-14
    • 2020-08-02
    相关资源
    最近更新 更多