【问题标题】:Getting different results using flatMap and compactMap [duplicate]使用 flatMap 和 compactMap 获得不同的结果 [重复]
【发布时间】:2019-02-13 05:20:00
【问题描述】:

我有 struct 类型的对象数组 A

struct Caste {
    var arr = [1,2]
}

let siri =  [Caste(), Caste(), Caste()]

现在我想要一个数组,其中每个对象数组的所有元素如下所示:

let re1 = siri.compactMap { $0.arr }
print("COMPACT: \(re1)")
let re2 = siri.flatMap { $0.arr }
print("FLAT: \(re2)")

结果:

COMPACT: [[1, 2], [1, 2], [1, 2]] FLAT: [1, 2, 1, 2, 1, 2]

由于在 Swift 4.1 中不推荐使用 flatMap,我尝试使用 compactMap,但它给出的数组不是单个数组。

当我通过 flatMap 获取时,如何通过 compactMap 实现。

【问题讨论】:

  • flatmap 的用例未被弃用
  • 另一个答案没有很清楚地涵盖的一件事。在 sn-p siri.compactMap { $0.arr } 中,由于闭包预期为 (T) -> T? 类型,并且由于 Swift 隐式将 T 类型的值 t 提升为 T? 类型的可选项,因此实际返回的是 @ 987654329@

标签: swift flatmap


【解决方案1】:

flatMap 被拆分为自身和compactMapflatMap 用于展平数组,而compactMap 的目的是获取[T?] 的数组并删除所有nil 对象,从而形成[T] 的数组。这有一个

【讨论】:

  • 更准确地说,Any(协议类型)和T(特定类型的占位符)之间存在区别
猜你喜欢
  • 1970-01-01
  • 2018-08-23
  • 2019-08-24
  • 2013-09-06
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
相关资源
最近更新 更多