1. import UIKit
    2. //map
    3. //map会遍历数组的每个元素,遍历到一个元素,会调用一次闭包生成一个新的值,最终所有的值组成一个新的数组返回
    4. var arr = [1, 2, 3, 4, 5]
    5. var arr1 = arr.map { (i) -> Int in
    6. return i * 2
    7. }
    8. print(arr1)
    9. //闭包表达式的简写
    10. var arr2 = arr.map { $0 * 2 }
    11. print(arr2)
    12. var ar = arr.map {
    13. (i) -> String in
    14. return "rulala_\(i)"
    15. }
    16. var arr3 = arr.map { "rulala_\($0)" }
    17. print(arr3)
    18. print(ar)
    19. //filter
    20. //filter会遍历数组的每个元素,如果元素满足一定的条件,就进行筛选过滤,最终筛选结果生成一个新的数组返回
    21. var arr4 = arr.filter {
    22. (i) -> Bool in
    23. return i % 2 == 0
    24. }
    25. var arr5 = arr.filter { $0 % 2 == 0 }
    26. print(arr4)
    27. print(arr5)
    28. //reduce
    29. //reduce 会遍历数组的每个元素,每遍历到一次,就调用一次闭包
    30. //例子里的result +element,就相当于数组每遍历一次,就将上一次的result跟元素element相加,
    31. //赋值给下一次的result,直到遍历结束:
    32. var arr6 = arr.reduce(0) { (result,element) -> Int in
    33. return result + element
    34. }
    35. //reduce后的(0)就是指从0开始加:0+1+2+3+4+5
    36. var arr7 = arr.reduce(0) { $0 + $1 }
    37. print(arr7)
    38. print(arr6)
    39. //reduce后的(1)就是指从1开始乘:0*1*2*3*4*5
    40. var arr8 = arr.reduce(1) { $0 * $1 }
    41. print(arr8)
    42. //flatmap
    43. //map跟flatmap一样,最终都是生成一个新的数组返回,但是flatmap的区别是它-
    44. //-会将内部的元素都拆开统一生成一个大的数组返回。(flat有平铺的意思,可以这么理解)
    45. var arrr = [1, 2, 3]
    46. var arrr1 = arrr.map{ Array.init(repeating: $0, count: $0) }
    47. print(arrr1) // [[1], [2, 2], [3, 3, 3]]
    48. var arrr2 = arrr.flatMap { Array.init(repeating: $0, count: $0) }
    49. print(arrr2) // [1, 2, 2, 3, 3, 3]
    50. var arrrr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    51. var arrrr1 = arrrr.map{ $0 }
    52. arr1 // [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    53. var arrrr2 = arrrr.flatMap{ $0 }
    54. arr2 // [1, 2, 3, 4, 5, 6, 7, 8, 9]
    55. //compactMap
    56. //当闭包中的返回结果是可选的时候,使用compactMap代替flatMap,同时在真正返回结果的时候,会自动过滤掉nil
    57. var aarr = [1, nil, 3, nil, 4, .none, Optional(6)]
    58. var aarr1 = aarr.compactMap { $0 }
    59. print(aarr1) // [1, 3, 4, 6]
    60. //下面的字符串数组中,分别采用map跟compactMap遍历数组。在map强转失败就是nil,
    61. //同时强转成功会处理成可选类型;而在compactMap中进行Int强转,不满足强转的元素会被当做nil过滤掉
    62. var aaarr = ["123", "test", "jack", "-39"]
    63. var aaarr1 = aaarr.map { Int($0) }
    64. print(aaarr1) // [Optional(123), nil, nil, Optional(-39)]
    65. var aaarr2 = aaarr.compactMap { Int($0) }
    66. print(aaarr2) // [123, -39]