从另一个Array <String>过滤Array <String>的值

ixa*_*any 3 arrays filter swift

我有两个数组:

let arr1 = ["one.json", "two.json", "three.json"]
let arr2 = ["one.json", "three.json"]
Run Code Online (Sandbox Code Playgroud)

现在我想删除arr2in的所有值arr1,所以我在上面的例子中的预期结果将是let arrFiltered = ["two.json"].我知道如何使用for循环来处理这个问题,但是,我认为可能有一个更简单,更面向性能的解决方案?

vad*_*ian 5

解决方案使用该filter功能

let arr1 = ["one.json", "two.json", "three.json"]
let arr2 = ["one.json", "three.json"]

let arrFiltered = arr1.filter{ !arr2.contains($0) }
Run Code Online (Sandbox Code Playgroud)


Ars*_*sen 5

你必须使用Set而不是Array在这种情况下.

let arr1 = Set(["one.json", "two.json", "three.json"])
let arr2 = Set(["one.json", "three.json"])

arr1.subtract(arr2)
Run Code Online (Sandbox Code Playgroud)

基本集合运算

下图描绘了两组-a和b-,其中各种设置操作的结果由阴影区域表示.

在此输入图像描述

  • 使用intersect(_ :)方法创建一个新集合,其中只包含两个集合共有的值.
  • 使用exclusiveOr(_ :)方法创建一个新集合,其中包含任一集合中的值,但不能同时创建两者.
  • 使用union(_ :)方法创建一个包含两个集合中所有值的新集合.
  • 使用subtract(_ :)方法创建一个值不在指定集中的新集.

阅读更多