【发布时间】:2019-05-22 03:42:27
【问题描述】:
谁能描述 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时嵌套数组没有展平?
【问题讨论】:
-
它们没有被重命名。有2个,因为它们不同。以前,根据对象是否是可选的,将使用 2 个重载中的哪一个是不明确的。这在某些情况下造成了很大的混乱。底线:不,紧凑地图不仅仅是平面地图的重命名,而是平面地图中的一项功能的重命名。
-
看看here
标签: swift functional-programming