使用for循环结合insert向数组插入元素出现重复,如何修复?
问题修复方案
错误原因
你用for fruit in fruits循环遍历了整个fruits数组(共3个元素),每次循环都执行两次硬编码的插入操作:插入"Apples"到索引0、插入"Orange"到索引1,这直接导致相同元素被重复插入。而且循环变量fruit完全没被使用,属于冗余且逻辑错误的写法。
修复代码
方案1:直接插入指定元素
如果明确只需要将fruits里的前两个元素(Apples、Orange)插入到food的开头,无需循环,直接执行插入操作即可:
var fruits = ["Apples", "Orange", "Banana"] var vegetables = ["Potato", "Carrot", "Tomato"] var food = vegetables // 先插入Orange到索引1,再插入Apples到索引0,保证顺序正确 food.insert("Orange", at: 1) food.insert("Apples", at: 0) print(food) // 输出:["Apples", "Orange", "Potato", "Carrot", "Tomato"]
方案2:批量插入切片(更高效)
如果需要插入的是fruits数组的前两个元素,也可以直接批量插入数组切片,无需逐个操作:
var fruits = ["Apples", "Orange", "Banana"] var vegetables = ["Potato", "Carrot", "Tomato"] var food = vegetables // 插入fruits的前两个元素到food的索引0位置 food.insert(contentsOf: fruits[0...1], at: 0) print(food) // 输出:["Apples", "Orange", "Potato", "Carrot", "Tomato"]
方案3:动态筛选插入(适配扩展需求)
如果后续需要根据条件筛选fruits中的元素插入,可以先筛选目标元素,再批量插入:
var fruits = ["Apples", "Orange", "Banana"] var vegetables = ["Potato", "Carrot", "Tomato"] var food = vegetables // 筛选出需要插入的元素(比如排除Banana) let targetFruits = fruits.filter { $0 != "Banana" } // 批量插入到food开头 food.insert(contentsOf: targetFruits, at: 0) print(food) // 输出:["Apples", "Orange", "Potato", "Carrot", "Tomato"]
内容的提问来源于stack exchange,提问作者Maximovic
相关产品推荐
相关产品推荐

