首页 > 解决方案 > 创建 nXn 矩阵,其值递增 Swift

问题描述

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

当我做下面这样的事情时,我可以得到全零

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

为了实现,我需要遍历元素并重新分配递增的值。取而代之的是,我可以在不使用 for 循环的情况下遵循任何快速方法吗?

标签: iosarraysswiftmatrix

解决方案


一种可能的方法是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 } }

但这不是我真正推荐的。


推荐阅读