如何用大小创建Swift空二维数组

mri*_*ddi 13 arrays swift

我试着像这样做:

let myArray: [[MyClass]] = [5,5]
Run Code Online (Sandbox Code Playgroud)

其中[5,5]是数组的大小.我不能这样做.

ric*_*ter 25

如果你想创建一个多维数组类型的数组(即Ints,Strings,structs),那么codester的答案中的语法效果很好:

斯威夫特4

var arr = [[Int]](repeating: [Int](repeating: 0, count: 5), count: 5)
Run Code Online (Sandbox Code Playgroud)

斯威夫特早些时候

var arr = [[Int]](count: 5, repeatedValue: [Int](count: 5, repeatedValue: 0))
arr[0][1] = 1
// arr is [[0, 1, 0, 0, 0], ...
Run Code Online (Sandbox Code Playgroud)

如果你创建一个多维的引用类型数组(即类),这将获得一个对同一对象的许多引用的数组:

class C {
    var v: Int = 0
}
var cArr = [[C]](count: 5, repeatedValue: [C](count: 5, repeatedValue: C()))
// cArr is [[{v 0}, {v 0}, {v 0}, {v 0}, {v 0}], ...
cArr[0][1].v = 1
// cArr is [[{v 1}, {v 1}, {v 1}, {v 1}, {v 1}], ...
Run Code Online (Sandbox Code Playgroud)

如果要创建一个引用类型的数组(单维或多维),那么动态生成数组可能会更好:

var cArr = [[C]]()
for _ in 0..<5 {
    var tmp = [C]()
    for _ in 0..<5 {
        tmp += C()
    }
    cArr += tmp
}
// cArr is [[{v 0}, {v 0}, {v 0}, {v 0}, {v 0}], ...
cArr[0][1].v = 1
// cArr is [[{v 0}, {v 1}, {v 0}, {v 0}, {v 0}], ...
Run Code Online (Sandbox Code Playgroud)

(请参阅slazyk的答案,使用等效的较短语法map().)

或者制作一组可选项并填写其值:

var optArr = [[C?]](count: 5, repeatedValue: [C?](count: 5, repeatedValue: nil))
// optArr is [[nil, nil, nil, nil, nil], ...
optArr[0][1] = C()
// optArr is [[nil, {v 0}, nil, nil, nil], ...
Run Code Online (Sandbox Code Playgroud)


sla*_*zyk 5

创建填充了同一类的不同对象的5x5数组.也许不是最漂亮的解决方案,而是一个有效的解决方案,并避免使用for循环:

let myArray = [[MyClass]](map(0..<5) { _ in
    [MyClass](map(0..<5) { _ in
        MyClass()
    })
})
Run Code Online (Sandbox Code Playgroud)

编辑:
因为问题实际上是用'size'创建'empty'数组,所以我必须补充一点,如果它不是可选类型,你就不能把它'空'.但如果这是你想要的,你也可以这样做,因为rickster建议在他的答案的底部,只需创建5x5阵列nil.