swift - compactMap 与 flatMap,Swift
问题描述
谁能描述 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
嵌套数组时没有展平?
解决方案
曾经有两个不同的函数命名flatMap
为序列;一种用于过滤掉 nil 值,一种用于连接序列。现在,其中一个(nil
变体)已重命名为compactMap
推荐阅读
- angularjs - AWS Elastic Beakstalk - 将 Angular 项目上传到 S3 存储桶后出现 403 禁止错误(作为静态网站托管)
- reactjs - GoodData UI 在呈现表格类型洞察力方面存在问题
- filepond - Filepond - 不支持的图像类型
- r - 为 R 中的特定 x 值拟合 y 的最大值和最小值的线性回归线
- android - 如何在 affolstad 材质对话框中传递自定义列表以进行多选?
- elasticsearch - 复合聚合中的桶排序?
- kotlin - 我可以设置 IDEA 以便 ';' 一定要使用否则不会编译?
- reactjs - 如何在避免 TypeScript 错误 7053 的同时使用变量动态调用类方法?
- database - Firebase 实时数据库电话安全规则
- javascript - 为获取请求返回未定义