如何遍历Swift二维数组,将除最后一列外的元素改为字符串"1"?
Swift二维数组修改指定元素实现方案
针对你提出的需求,这里提供几种可行的实现思路:
方法一:嵌套循环遍历修改
这是最直观的实现方式,通过逐行逐列遍历,判断列索引是否为最后一列,仅修改非最后一列的元素:
var excelArray = [[String]](repeating: [String](repeating: "N/A", count: 10), count: 27) // 遍历每一行 for rowIndex in 0..<excelArray.count { let columnCount = excelArray[rowIndex].count // 遍历当前行中除最后一列外的所有列 for columnIndex in 0..<columnCount - 1 { excelArray[rowIndex][columnIndex] = "1" } }
这种方式逻辑清晰,适合理解数组遍历的基础场景,能精准控制修改的范围。
方法二:函数式写法(map+数组拼接)
利用Swift的函数式特性,通过map生成新数组,结合数组拼接快速完成修改:
var excelArray = [[String]](repeating: [String](repeating: "N/A", count: 10), count: 27) excelArray = excelArray.map { row in // 生成对应数量的"1"元素数组,拼接原行的最后一个元素 Array(repeating: "1", count: row.count - 1) + [row.last!] }
这种写法更符合Swift的风格,代码简洁紧凑,适合已经熟悉Swift集合操作的开发者。
方法三:子范围替换
通过replaceSubrange方法直接修改每行的指定范围元素,结合enumerated遍历行索引:
var excelArray = [[String]](repeating: [String](repeating: "N/A", count: 10), count: 27) for (rowIndex, var row) in excelArray.enumerated() { let targetRange = 0..<row.count - 1 // 替换指定范围的元素为"1" row.replaceSubrange(targetRange, with: Array(repeating: "1", count: targetRange.count)) excelArray[rowIndex] = row }
这种方式可以直接对行的子范围进行批量修改,操作效率较高。
注意事项
如果需要兼容空行或者列数为1的行(即没有非最后一列的情况),可以在修改前增加判断:
// 以方法一为例,增加判断 for rowIndex in 0..<excelArray.count { let columnCount = excelArray[rowIndex].count guard columnCount > 1 else { continue } for columnIndex in 0..<columnCount - 1 { excelArray[rowIndex][columnIndex] = "1" } }
内容的提问来源于stack exchange,提问作者user20053202
相关产品推荐
相关产品推荐

