当前位置: 首页 > 知识库问答 >
问题:

compactMap vs flatMap,Swift[重复]

严烨
2023-03-14

有人能描述一下flatMap与compactMap的这种行为吗?compactMap不是刚刚重命名为flatMap吗?因为我发现他们表现不同

struct Person {
  let cars: [String]?
  let name: String
  let surname: String
  let age: Int
}

let people = [
  Person(cars: nil, name: "Adam", surname: "Bayer", age: 19),
  Person(cars: ["Audi","BMW"], name: "Michael", surname: "Knight", age: 40),
  Person(cars: ["BMW", "Mercedes", "Audi"], name: "Freddy", surname: "Krueger", age: 62)
]

let flatCars = people.flatMap { $0.cars }.flatMap { $0 }
let flatCompactCars = people.flatMap { $0.cars }.compactMap { $0 }

let compactFlatCars = people.compactMap { $0.cars }.flatMap { $0 }
let compactCars = people.compactMap { $0.cars }.compactMap { $0 }

这是它打印的

flatMap flatMap:        ["Audi", "BMW", "BMW", "Mercedes", "Audi"]
flatMap compactMap:     [["Audi", "BMW"], ["BMW", "Mercedes", "Audi"]]
compactMap flatMap:     ["Audi", "BMW", "BMW", "Mercedes", "Audi"]
compactMap compactMap:  [["Audi", "BMW"], ["BMW", "Mercedes", "Audi"]]

有人能告诉我为什么当我使用compactMap嵌套数组不扁平吗?

共有1个答案

江天宇
2023-03-14

对于序列,过去有两个不同的函数名为flatMap;一个用于过滤掉nil值,另一个用于连接序列。现在,其中一个(nil变体)已重命名为compactMap

 类似资料:
  • 我试图生成一个qrcode,但它有错误 线程1:致命错误:在展开一个可选值时意外地找到nil

  • 在Swift中,字符串中的的等价物是什么 我尝试了以下操作,但收到一条错误消息

  • 我有三个数组来制作一个tableView和第二个ViewController。一个显示tableView上每个节的标题,一个显示标题,还有一个显示每个单元格的链接。当我构建并点击其中一个单元格时,我会得到: 致命错误:在展开可选值时意外发现nil 在这条线上: 下面是第二个视图控制器代码:

  • 你会如何用swift写下以下内容?

  • 我正在调用一个API来获取一些数据。API响应以格式返回日期和时间,但当我使用将其解析为时,它显示而不是我从API获得的date.String格式是。 这是我的代码。

  • 请你能告诉我如何排序(降序,升序)多个数组的"BonusCard"在"bonusCardsArray"的基础上,其"当前点"值。