flatMap

flatMap

函数式编程中的map reduce filter算子很好理解。
但是flatMap一直让我很困惑。
今天阅读《Swift进阶》时,书中的例子让我恍然大悟。
记录如下:
我想提取单个文本文件中的URL,有如下函数原型

func extractLinks(from file: String) -> [URL]

如果我有很多文本文件改如何处理呢?

let fileArray: [String] = ...
let nestedLinks = fileArray.map(extractLinks)

但是此时得到结果是嵌套数据

[["http://","https://"],["smb://"]....,["ftp://"]]

整合成为一个数组,

let links = nestedLinks.joined()

下面轮到flatMap登场:

fileArray.flatMap(extractLinks)

flatMap与上面的map+joined等价。