You need to enable JavaScript to run this app. 如何在数组每隔3个元素后重复插入元素,insert(_:at:)不适用
优惠活动
大模型
产品
解决方案
定价
更多

如何在数组每隔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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 14:15:00