如何使用Swift比较两个数组并移除相同元素获取差异数组
Swift 数组剔除共有元素实现方案
需求为从第一个数组中移除两个数组共有的元素,得到仅在第一个数组中存在的元素,以下是3种常用实现方案:
- 方案1:保留原数组顺序,适配小数据量场景
直接使用filter方法遍历第一个数组,过滤掉所有在第二个数组中存在的元素即可,输出结果完全匹配你给出的顺序要求:var string1 = ["A", "B", "C"] var string2 = ["B"] let result = string1.filter { !string2.contains($0) } // 输出结果:["A","C"] - 方案2:大数组性能优化版本
当第二个数组元素量较大时,先把第二个数组转成Set再做存在性判断,能把判断的时间复杂度从O(n)降到O(1),运行效率更高:var string1 = ["A", "B", "C"] var string2 = ["B"] let excludeSet = Set(string2) let result = string1.filter { !excludeSet.contains($0) } - 方案3:不要求保留顺序的高效写法
直接用Set的原生差集运算,运算效率最高,但输出结果是无序的,不会保留原数组的元素排列顺序:var string1 = ["A", "B", "C"] var string2 = ["B"] let result = Array(Set(string1).subtracting(Set(string2)))
内容的提问来源于stack exchange,提问作者Jack Chang
相关产品推荐
相关产品推荐

