swift 中Map和FlatMap的区别

比如说有一个数组

var array = [1,2,3]

如果有个需求是需要用这个数组生成一个新数组为每个元素自身想家的结果数组,那么一般的做法是会通过遍历来完成这个需求,示例如下:
var array2:[Int] = []
for item in array 
{
    array.append(item)
}
这样生成的新数组即得到了我们需要的数据
如果通过map这个高阶函数来实现的话那么就简单多了,示例如下:
let array2 = array.map { (number: Int) -> Int in
    return number + number
}
或
let array2 = array.map {
    return $0 + $0
}
1、flatMap的功能和map类似,区别在于flatMap可以去nil,还可以自动解包,示例如下
let fruits = ["apple", "banana", "orange", ""]
// 这里数组中存在一个""的字符串 为了后面来比较 map 和 flatMap
let counts = fruits.map { fruit -> Int? in
    let length = fruit.characters.count
    guard length > 0 else {
        return nil
    }
    return length
}
// [Optional(5), Optional(6), Optional(6), nil]
print(counts)

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]
print(counts)
2. flatMap 还能把数组中存有数组的数组 一同打开变成一个新的数组
let array = [[1,2,3], [4,5,6], [7,8,9]]
// 如果用map来获取新的数组
let arrayMap = array.map { $0 }
// [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(arrayMap)
// 用flatMap
let arrayFlatMap = array.flatMap { $0 }
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(arrayFlatMap)

说点什么

avatar
  Subscribe  
提醒