如何在Swift中声明多维布尔数组?

时间:2015-03-06 03:26:59

标签: ios macos swift multidimensional-array

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

var foo:[[Bool]] = []

但是我无法弄清楚如何声明10 x 10的类型。我查找的每个示例只是附加到空集,所以如何将此变量初始化为10x10,其中每个点都被视为布尔值? / p>

4 个答案:

答案 0 :(得分:5)

其他答案可行,但您可以使用Swift泛型,下标和选项来制作通用类型的2D数组类:

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

答案 1 :(得分:2)

您也可以使用此 oneliner

执行此操作
var foo = Array(count:10, repeatedValue:
                          Array(count:10, repeatedValue:false))

答案 2 :(得分:2)

对于Swift 3.1:

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

请参阅Swift documentation

答案 3 :(得分:0)

作为单行,您可以使用指定的计算值进行初始化:

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 } }