簡體   English   中英

如何在 Swift 中聲明一個多維布爾數組?

[英]How to Declare a Multidimensional Boolean array in Swift?

我已經看到了很多關於如何做到這一點的不同例子,但它們似乎都沒有顯示出我真正需要的答案。 所以我知道如何聲明一個 bool 類型的多維數組。

var foo:[[Bool]] = []

但是,我無法弄清楚如何聲明 10 x 10 類型的這個。我查找的每個示例都只是附加到一個空集,那么如何將此變量初始化為 10x10,其中每個點都被視為布爾值?

其他答案有效,但您可以使用 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

你也可以用這個oneliner做到這一點

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

對於 Swift 3.1:

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

查看Swift 文檔

作為單行程序,您可以使用分配的計算值進行初始化:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM