创建值递增Swift的nXn矩阵

时间:2019-03-08 06:22:16

标签: ios arrays swift matrix

我试图找到一种简单的方法来创建具有自增值的矩阵,即如果是3x3数组,则它看起来应该像 [[0,1,2],[3,4,5],[6,7,8]]

当我执行以下操作时,我可以得到全零的

var arr = Array(repeating: Array(repeating: 0, count: 3), count: 3)

为了达到目的,我需要遍历元素并重新分配递增的值。除此之外,还有什么不使用for循环就可以遵循的快速方法?

2 个答案:

答案 0 :(得分:1)

一种可行的方法是在行和列的范围上使用map()

let nrows = 3 // Number of rows
let ncols = 3 // Number of columns
let matrix = (0..<nrows).map { row in (0..<ncols).map { col in ncols * row + col } }
print(matrix) // [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

外部(0..<nrows).map将每个行号映射到一个数组(“行”),内部(0..<ncols).map将每个列号映射到一个矩阵条目。

通过一点点“元组魔术”,您可以分配自动递增的值:

var entry = 0
let matrix = (0..<nrows).map { _ in (0..<ncols).map { _ in (entry, entry += 1).0 } }

但这不是我真正推荐的。

答案 1 :(得分:0)

Swift.org上有一个Subscripts教程,展示了我非常喜欢的Matrix结构示例