map: 正常遍历
flatMap:已弃用:4.1,重命名为:“compactMap(_:)”,消息:“对于闭包返回可选值的情况,请使用compactMap。
flatMap:可以自动解包。特殊表达式可以去nil。
//二维数组可以解包
let array = [[1,2,3], [4,5,6], [7,8,9]]
let arrayFlatMap = array.flatMap { $0 }
print(arrayFlatMap) //[1, 2, 3, 4, 5, 6, 7, 8, 9]
//这种则无法解包
var customArr2 : [Any] = ["李一", "张2", "刘3", "赵四", "王五",["吴6","范7","吕宝贝8"]]
let array2 = customArr2.flatMap { $0}
print(array2)//["李一", "张2", "刘3", "赵四", "王五", ["吴6", "范7", "吕宝贝8"]]
let fruits = ["apple", "banana", "orange", ""]
let counts = fruits.flatMap { fruit -> Int? in
let length = fruit.characters.count
guard length > 0 else {
return nil
}
return length
}
// [5,6,6]
compactMap :函数会自动过滤掉映射结果为nil或者无效的值,只保留非空的映射结果
let possibleNumbers = ["1", "2", "three", "///4///", "5"]
//普通map遍历
let mapped: [Int?] = possibleNumbers.map { str in Int(str) }
print(mapped)
//[Optional(1), Optional(2), nil, nil, Optional(5)]
let compactMapped: [Int] = possibleNumbers.compactMap { str in Int(str) }
print(compactMapped) //[1, 2, 5]