如何在数组每隔3个元素后重复插入元素,insert(_:at:)不适用
固定间隔批量插入数组元素的实现方案
内置方法适配说明
Swift 数组的内置方法中没有可直接完成「每3个元素后重复插入指定元素」的现成函数,你查到的insert(_:at:)仅支持单次在指定索引插入单个元素,直接循环调用会因为插入操作改变数组长度、引发后续索引偏移,无法适配本场景需求,可通过以下两类稳定的自定义方案实现:
方案1:逐元素遍历重组(易读无偏移问题)
- 核心逻辑:遍历原数组所有元素,累计已遍历的元素计数,满足每3个元素的节点时追加目标插入元素,全程操作新数组,不存在索引偏移风险
var sampleArray = ["1","2","3","4","5","6","7","8","9","10"] let header = "header" let footer = "footer" var result: [String] = [] for (idx, item) in sampleArray.enumerated() { result.append(item) // 每凑够3个元素、且不是数组最后一个元素时,插入header和footer if (idx + 1) % 3 == 0 && idx != sampleArray.count - 1 { result.append(contentsOf: [header, footer]) } }
方案2:按固定长度分块拼接(代码精简)
- 核心逻辑:按每3个元素为一组拆分原数组,每个非末尾分组后拼接
[header, footer],最后合并所有分组得到目标数组
let chunkLength = 3 var result: [String] = [] for startIdx in stride(from: 0, to: sampleArray.count, by: chunkLength) { let endIdx = min(startIdx + chunkLength, sampleArray.count) let currentChunk = Array(sampleArray[startIdx..<endIdx]) result.append(contentsOf: currentChunk) // 非最后一个分组才插入目标元素,避免末尾多余插入 if endIdx != sampleArray.count { result.append(contentsOf: [header, footer]) } }
说明:你给出的预期输出存在几处语法笔误(字符串缺失引号、相邻元素间缺失逗号),以上两种实现最终输出的正确数组结构为:
["1","2","3","header","footer","4","5","6","header","footer","7","8","9","header","footer","10"]
内容的提问来源于stack exchange,提问作者Dipesh Pokhrel
相关产品推荐
相关产品推荐

