Swift数组同步问题求助:保留原顺序同步两个数组
Swift数组同步:保留原有元素位置的实现方案
要实现保留array2原有元素位置的同步需求(删除array2中array1不存在的元素,将array1独有的元素追加到array2末尾),可以通过以下步骤完成,避开difference(from:)打乱顺序的问题:
实现思路
- 过滤array2,仅保留同时存在于array1的元素,确保原有顺序不变;
- 提取array1中未出现在过滤后array2里的元素,按array1的顺序取出;
- 将提取的元素追加到过滤后的array2末尾,得到最终同步结果。
示例代码
let array1 = ["01", "06", "17", "22", "33", "45", "04"] var array2 = ["04", "17", "22", "10", "01", "34"] // 用Set存储array1元素,提升查找效率 let array1Elements = Set(array1) // 过滤array2:保留存在于array1的元素,维持原有顺序 let filteredExisting = array2.filter { array1Elements.contains($0) } // 找出array1中不在过滤后array2里的元素,按array1顺序提取 let newElementsToAdd = array1.filter { !filteredExisting.contains($0) } // 合并得到同步后的array2 array2 = filteredExisting + newElementsToAdd // 输出结果:["04", "17", "22", "01", "06", "33", "45"] print(array2)
说明
- 使用
Set存储array1元素是为了将元素查找的时间复杂度从O(n)降到O(1),提升处理效率,尤其当数组元素较多时效果明显; - 过滤操作严格保留array2中符合条件元素的原有顺序,再追加array1独有的元素,完全匹配需求中的同步规则。
内容的提问来源于stack exchange,提问作者J.B
相关产品推荐
相关产品推荐

