我试图找到一种简单的方法来创建具有自增值的矩阵,即如果是3x3数组,则它看起来应该像 [[0,1,2],[3,4,5],[6,7,8]]
当我执行以下操作时,我可以得到全零的
var arr = Array(repeating: Array(repeating: 0, count: 3), count: 3)
为了达到目的,我需要遍历元素并重新分配递增的值。除此之外,还有什么不使用for循环就可以遵循的快速方法?
答案 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结构示例