【问题标题】:Filter values of Array<String> from another Array<String>从另一个 Array<String> 过滤 Array<String> 的值
【发布时间】:2016-01-16 01:27:07
【问题描述】:

我有两个数组:

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

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

【问题讨论】:

  • for 循环是最快的解决方案。

标签: arrays swift filter


【解决方案1】:

在这种情况下,您必须使用 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(_:) 方法创建一个包含两个集合中所有值的新集合。
  • 使用减法(_:) 方法创建一个新集合,其中的值不在指定集合中。

Read more

【讨论】:

    【解决方案2】:

    使用filter函数的解决方案

    let arr1 = ["one.json", "two.json", "three.json"]
    let arr2 = ["one.json", "three.json"]
    
    let arrFiltered = arr1.filter{ !arr2.contains($0) }
    

    【讨论】:

    • 强烈建议这个解决方案:无论如何,每个人都需要学习过滤器。
    猜你喜欢
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多