swift小知识点之map和flatmap
一,前言
比如说有一个数组 var array = [1,2,3]
如果有个需求是需要用这个数组生成一个新数组为每个元素自身想家的结果数组,那么一般的做法是会通过遍历来完成这个需求,示例如下:
var array2:[Int] = []
for item in array {
array.append(item)
}
这样生成的新数组即得到了我们需要的数据
二,关于map和flatmap
如果通过map这个高阶函数来实现的话那么就简单多了。
-
map和flatmap都可以对数组中的每一个元素进行操作。
let array2 = array.map { (number: Int) -> Int in return number + number } 或 let array2 = array.map { return $0 + $0 }
-
flatMap的功能和map类似,区别在于flatMap可以去nil,还可以自动解包,示例如下
map
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)
flatmap
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)
- 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)