Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 数组的筛选值<;字符串>;从另一个数组<;字符串>;_Arrays_Swift_Filter - Fatal编程技术网

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是最快的解决方案。强烈建议使用此解决方案:每个人都需要学习过滤器。