【问题标题】:How to Declare a Multidimensional Boolean array in Swift?如何在 Swift 中声明一个多维布尔数组?
【发布时间】:2015-03-06 03:26:58
【问题描述】:

我已经看到了很多关于如何做到这一点的不同示例,但似乎没有一个显示出我真正需要的答案。所以我知道如何声明一个 bool 类型的多维数组。

var foo:[[Bool]] = []

但是我不知道如何声明这个类型为 10 x 10。我查找的每个示例都只是附加到一个空集,那么我如何将这个变量初始化为 10x10,其中每个点都被视为布尔值?

【问题讨论】:

  • 您已经可以在该多维数组中存储一个 10x10 Bool

标签: ios macos swift multidimensional-array


【解决方案1】:

其他答案有效,但您可以使用 Swift 泛型、下标和可选项来创建一个泛型类型的二维数组类:

class Array2D<T> {
    let columns: Int
    let rows: Int

    var array: Array<T?>

    init(columns: Int, rows: Int) {
        self.columns = columns
        self.rows = rows

        array = Array<T?>(count:rows * columns, repeatedValue: nil)
    }

    subscript(column: Int, row: Int) -> T? {
        get {
            return array[(row * columns) + column]
        }
        set(newValue) {
            array[(row * columns) + column] = newValue
        }
    }
}

(你也可以把它变成一个结构体,声明mutating。)

用法:

var boolArray = Array2D<Bool>(columns: 10, rows: 10)
boolArray[4, 5] = true

let foo = boolArray[4, 5]
// foo is a Bool?, and needs to be unwrapped

【讨论】:

    【解决方案2】:

    你也可以用这个oneliner

    var foo = Array(repeating: Array(repeating: false, count: 10), count: 10)
    

    【讨论】:

    • 我会明确地将重复值设置为 true 或 false。
    【解决方案3】:

    对于 Swift 3.1:

    var foo: [[Bool]] = Array(repeating: Array(repeating: false, count: 10), count: 10)
    

    Swift documentation

    【讨论】:

      【解决方案4】:

      作为单行程序,您可以像这样使用分配的计算值进行初始化:

      var foo = (0..<10).map { _ in (0..<10).map { $0 % 2 == 0 } }
      

      或者

      var bar = (0..<10).map { a in (0..<10).map { b in (a + b) % 3 == 0 } }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-15
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 2018-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多