gpt4 book ai didi

arrays - Swift 中多维数组的语法是什么?

转载 作者:行者123 更新时间:2023-11-28 10:24:49 25 4
gpt4 key购买 nike

CO 粉丝:在你下结论之前,它是重复的,有两种不同风格的数组,我似乎问的是不太受欢迎的一种。

到目前为止,我只看到了锯齿状数组的语法,如 [[Int]],但我找不到任何关于平面多维数组的信息。那么类型的语法是什么(比如 Ints 的二维数组)以及用数据初始化这样的数组的语法是什么?有没有 [2, 3 ;; -1, 0]?

最佳答案

是的,没有内置的东西(据我所知)。您可以定义自定义类/结构(如 Most efficient way to access multi-dimensional arrays in Swift?How to Declare a Multidimensional Boolean array in Swift? ) 与下标运算符,因此 a[0,0] = 1 有效。

这里是这些解决方案的混合,但作为通用 struct 而不是 class。我也改变了顺序行和列参数,因为我发现这更自然:

struct Array2D<T : IntegerLiteralConvertible > {
let rows : Int
let cols : Int
var matrix: [T]

init(rows : Int, cols : Int) {
self.rows = rows
self.cols = cols
matrix = Array(count : rows * cols, repeatedValue : 0)
}

subscript(row : Int, col : Int) -> T {
get { return matrix[cols * row + col] }
set { matrix[cols*row+col] = newValue }
}
}

我不知道如何从像这样的文字中创建这样的东西[2, 3 ;; -1, 0]。但是您可以从嵌套数组中初始化它:

extension Array2D {

init(_ elements: [[T]]) {
let rows = elements.count
let cols = elements[0].count
self.init(rows: rows, cols: cols)
for i in 0 ..< rows {
assert(elements[i].count == cols, "Array must have same number of elements for each row")
self.matrix.replaceRange(cols * i ..< cols * (i+1), with: elements[i])
}
}
}

例子:

let array = Array2D([[1, 2, 3], [4, 5, 6]])
println(array.rows) // 2
println(array.cols) // 3
println(array[1, 2]) // 6
println(array[1, 0]) // 4

您还可以实现 ArrayLiteralConvertible 协议(protocol)以从嵌套数组文字初始化二维数组:

extension Array2D : ArrayLiteralConvertible {

init(arrayLiteral elements: [T]...) {
self.init(elements)
}
}

例子:

let array : Array2D = [[1, 2, 3], [4, 5, 6]]

对于方形数组(行 == 列),您也可以从普通数组初始化它:

extension Array2D {

init(_ elements: [T]) {
let rows = Int(sqrt(Double(elements.count)))
assert(rows * rows == elements.count, "Number of array elements must be a square")
self.init(rows: rows, cols: rows)
self.matrix = elements
}
}

例子:

let squareArray = Array2D([2, 3, -1, 0])
println(squareArray.rows) // 2
println(squareArray.cols) // 3
println(squareArray[1, 0]) // -1

关于arrays - Swift 中多维数组的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28936824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com