map() :
就是接受一个闭包作为规则,自动遍历集合的每一个元素,使用闭包的规则去处理这些元素,生成一个结构相同的集合
compactMap:
对给定数组的每个元素,执行闭包中的映射,将非空的映射结果放置在数组中返回。
flatMap:
1.flatMap返回后的数组中不存在nil,同时它会把Optional解包.swift 4.1以后,用compactMap
let array = ["Apple", "Orange", "Puple", ""]
let arr1 = array.map { a -> Int? in
let length = a.characters.count
guard length > 0 else { return nil }
return length
}
arr1 // [{some 5}, {some 6}, {some 5}, nil]
let arr2 = array.flatMap { a-> Int? in
let length = a.characters.count
guard length > 0 else { return nil}
return length
}
arr2 // [5, 6, 5]
2.flatMap还能把数组中存有数组的数组(二维数组、N维数组)一同打开变成一个新的数组
let array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let arr1 = array.map{ $0 }
arr1 // [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let arr2 = array.flatMap{ $0 }
arr2 // [1, 2, 3, 4, 5, 6, 7, 8, 9]
3.flatMap也能把两个不同的数组合并成一个数组,这个合并的数组元素个数是前面两个数组元素个数的乘积
let fruits = ["Apple", "Orange", "Puple"]
let counts = [2, 3, 5]
let array = counts.flatMap { count in
fruits.map ({ fruit in
return fruit + " \(count)"
})
}
array // ["Apple 2", "Orange 2", "Puple 2", "Apple 3", "Orange 3", "Puple 3", "Apple 5", "Orange 5", "Puple 5"]
filter
这个函数就如同单词的意思:查找。将符合条件的元素查找出来放置在数组中返回。比如我们想查找年龄大于18岁的所有学生。
let adults = stus.filter { (stu) -> Bool in
stu.age >= 18
}
print(adults) // 数组中只包含stu4 学生
reduce
reduce的作用给定一个类型为U的初始值,把数组[T]中每一个元素传入到combine的闭包函数里面,通过计算得到最终类型为U的结果值。定义如下:
func reduce(initial: U, combine: (U, T) -> U) -> U
用reduce函数把String数组中元素连接一个字符串:
let strArr = ["han","mei","mei"]
let str_result = strArr.reduce("", { $0+$1 })
print("所得字符串==\(str_result)")
//结果为hanmeimei