如何向空[[Double]]矩阵内不存在的子vector追加元素
方案1:扩展Array实现自动补全缺失行的便捷追加(推荐)
你可以给二维Double数组加一个自定义扩展,调用时自动判断目标行是否存在,不存在就先创建足够的空行再执行追加:
extension Array where Element == [Double] { mutating func appendElement(_ element: Double, toRow row: Int) { // 目标行索引超过当前数组长度时,补全空行 while row >= self.count { self.append([]) } // 往目标行追加元素 self[row].append(element) } }
使用方式完全适配你的使用场景:
var matrix: [[Double]] = [] // 填充第一列(所有行的第0个元素) matrix.appendElement(1.0, toRow: 0) // 自动创建第0行,追加后matrix[0] = [1.0] matrix.appendElement(2.0, toRow: 1) // 自动创建第1行,追加后matrix[1] = [2.0] matrix.appendElement(3.0, toRow: 2) // 自动创建第2行,追加后matrix[2] = [3.0] matrix.appendElement(4.0, toRow: 3) // 自动创建第3行,追加后matrix[3] = [4.0] matrix.appendElement(5.0, toRow: 4) // 自动创建第4行,追加后matrix[4] = [5.0] // 后续填充第二列(所有行的第1个元素) matrix.appendElement(6.0, toRow: 0) // 第0行已存在,直接追加,matrix[0] = [1.0, 6.0] matrix.appendElement(7.0, toRow: 1) // 第1行已存在,直接追加,matrix[1] = [2.0, 7.0] matrix.appendElement(8.0, toRow: 2) // 第2行已存在,直接追加,matrix[2] = [3.0, 8.0] matrix.appendElement(9.0, toRow: 3) // 第3行已存在,直接追加,matrix[3] = [4.0, 9.0]
方案2:单次判断逻辑(不需要扩展的情况)
如果不想写全局扩展,也可以每次追加前单独做判断:
let targetRow = 0 let value = 1.0 if targetRow >= matrix.count { // 补全从当前长度到目标行的所有空行 for _ in matrix.count...targetRow { matrix.append([]) } } matrix[targetRow].append(value)
边界说明
如果你的填充场景里行索引不会连续增长(比如可能直接跳到第10行插入),上面的逻辑依然适用,会自动补全中间缺失的空行,不会出现索引越界问题。
内容的提问来源于stack exchange,提问作者Daniel Ardel-Smith
相关产品推荐
相关产品推荐

