map
可以对数组中的每个元素做一次处理,就是遍历的作用,map接受一个闭包作为参数,然后遍历数组,对数组的每一个元素来一次闭包的操作。相当于数组中所有元素做一次映射。
map可以对一个集合类型的所有元素做映射, 不会修改实例值,而是做一个拷贝。
flatMap:
flatMap 依然会遍历数组的元素,并对这些元素执行闭包中定义的操作
与Map不同的是,它对最终的结果进行了所谓的“降维”操作。 本来原始数组是一个二维的, 但经过 flatMap 之后,它变成一维的了
flatMap返回后的数组中不存在nil,同时它会把Optional解包
flatMap可以把两个不同的数组合并成一个数组
let values = [[1, 2, 4], [6], [12, 10]]
let result = values.map{$0}
print(result)// [[1, 2, 4], [6], [12, 10]]
let result2 = values.compactMap{$0}
print(result2) // [[1, 2, 4], [6], [12, 10]]
//降维
var result3 = values.flatMap{$0}
print(result3) // [1, 2, 4, 6, 12, 10]
//过滤nil, Optional解包
let array = ["1", "two", "3", "4", "five", "6"]
let map:[Int?] = array.map{ str in
Int(str)
}
print(map) // [Optional(1), nil, Optional(3), Optional(4), nil, Optional(6)]
let compactMaps: [Int] = array.compactMap{Int($0)}
print(compactMaps) //[1, 3, 4, 6]
//flatMap' is deprecated: Please use compactMap(_:) for the case where closure returns an optional value.
let flatMaps: [Int] = array.flatMap{Int($0)}
print(flatMaps) //[1, 3, 4, 6]
filter函数
//条件判断
var values = [1, 2, 4, 6, 12, 10]
values = values.filter{$0 > 7}
print(values) //[12, 10]
//筛选多维数组中的数据,flatMap配合filter使用
let arrays = [[1, 2, 4], [6], [12, 10]]
let flatMap = arrays.flatMap{$0.filter{$0 % 2 == 0}}.sorted()
print(flatMap) //[2, 4, 6, 10, 12]