Arrays 数组的筛选值<;字符串>;从另一个数组<;字符串>;
我有两个阵列:Arrays 数组的筛选值<;字符串>;从另一个数组<;字符串>;,arrays,swift,filter,Arrays,Swift,Filter,我有两个阵列: let arr1 = ["one.json", "two.json", "three.json"] let arr2 = ["one.json", "three.json"] 现在我想删除arr1中arr2的所有值,因此在上面的示例中,我的预期结果将是let arrFiltered=[“two.json”]。我知道如何使用for循环来处理这个问题,但是,我认为可能有一个更简单、更面向性能的解决方案?使用过滤器功能的解决方案 let arr1 = ["one.json", "tw
let arr1 = ["one.json", "two.json", "three.json"]
let arr2 = ["one.json", "three.json"]
现在我想删除
arr1
中arr2
的所有值,因此在上面的示例中,我的预期结果将是let arrFiltered=[“two.json”]
。我知道如何使用for循环来处理这个问题,但是,我认为可能有一个更简单、更面向性能的解决方案?使用过滤器
功能的解决方案
let arr1 = ["one.json", "two.json", "three.json"]
let arr2 = ["one.json", "three.json"]
let arrFiltered = arr1.filter{ !arr2.contains($0) }
在这种情况下,必须使用
Set
而不是Array
let arr1 = Set(["one.json", "two.json", "three.json"])
let arr2 = Set(["one.json", "three.json"])
arr1.subtract(arr2)
基本集合运算
下图描述了两组(a组和b组)的测试结果
由着色区域表示的各种集合操作
- 使用intersect(:)方法创建一个新集合,该集合仅包含两个集合共有的值
- 使用exclusiveOr(:)方法创建一个新的集合,其中包含任意一个集合中的值,但不能同时包含这两个集合中的值
- 使用union(:)方法创建一个包含两个集合中所有值的新集合
- 使用减法(:)方法创建一个值不在指定集合中的新集合
for loop是最快的解决方案。强烈建议使用此解决方案:每个人都需要学习过滤器。