参考文章
Map和FlatMap的主要区别是,flatmap会把两个数组合并为一个,而map不会。
例如:
func setupMap() {
let num = [[1,3],[2,4]]
let res = num.map{
$0.map{$0 + 2}
}
let flatRes = num.flatMap{
$0.map{$0 + 2}
}
// print(res):[[1, 5], [4, 6]]
//print(flatRes):[1, 5, 4, 6]
}
Map函数返回数组的元素类型不一定要与原数组相同
func setupMap1() {
let num = [[1,3],[2,4]]
let res = num.map{
$0.map{event -> Bool in
let item = event
if item == 1 {
return true
}else {
return false
}
}
}
let flatRes = num.flatMap{
$0.map{event -> Bool in
let item = event
if item > 2 {
return true
}else {
return false
}
}
}
//print(res):[[true, false], [false, false]]
//print(flatRes):[false, true, false, true]
}
其它:
filter 可以取出数组中符合条件的元素 重新组成一个新的数组
let numbers = [1,2,3,4,5,6]
let evens = numbers.filter { $0 % 2 == 0 }
// [2, 4, 6]
print(evens)
map,flatMap和filter方法都是通过一个已存在的数组,生成一个新的、经过修改的数组。然而有时候我们需要把所有元素的值合并成一个新的值 那么就用到了Reduce
- 比如我们要获得一个数组中所有元素的和
let numbers = [1,2,3,4,5]
// reduce 函数第一个参数是返回值的初始化值
let sum = numbers.reduce(0) { $0 + $1 }
// 这里我写下完整的格式
let sum1 = numbers.reduce(0) { total, num in
return total + num
}
// 15
print(sum)
- 合并成的新值不一定跟原数组中元素的类型相同
let numbers = [1,5,1,8,8,8,8,8,8,8,8]
// reduce 函数第一个参数是返回值的初始化值
let tel = numbers.reduce("") { "($0)" + "($1)" }
// 15188888888
print(tel)