欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Swift语法-高阶函数

程序员文章站 2024-03-23 08:40:10
...

     高阶函数map,flatMap,reduce,filter可以简化代码量, 能用就用。


1、 map函数, 是集合和String类的实例方法, 作用是遍历时修改item;map并不会修改实例值, 而且新建一个拷贝。

摘自官方文档:

let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let lowercaseNames = cast.map { $0.lowercased() }
// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]
let letterCounts = cast.map { $0.count }
// 'letterCounts' == [6, 6, 3, 4]

再举2个例子说明:

1、将Int数组转换为String数组, 即map支持转换数组参数类型;

2、偶数乘以10,测试遍历时添加自定义逻辑;

    let array = [1, 2, 3]
    let str1 = array.map({ "$\($0)"}) //数组每个元素转成String类型
    let str2 = array.map{ param -> Int in   //遍历时可以添加条件判断逻辑
        if param%2 == 0 {
            return param * 10  //偶数乘以10
        } else {
            return param
        }
    }
    print(array) //[1 2 3]
    print(str1)  //[“$1","$2","$3"]
    print(str2)  //[1,20,3]

2、flatMap, 功能跟map类似; 区别是flatMap会过滤nil元素, 并解包Optional。

示例:

Swift语法-高阶函数

      arr1包含5个值, arr4包含4个值。

      

      flatMap还可以将多维数组转换为一维数组;

Swift语法-高阶函数

     对于N维数组, map函数仍然返回N维数组。 Swift语法-高阶函数

    PS: arr数组里包含3个元素, map循环了4次。


3、 filter函数, 顾名思义就是过滤出符合条件的元素。

Swift语法-高阶函数


4、reduce函数, 它可以使用2个参数即$0和$1, 而前3个函数只能使用一个参数$0。

     reduce可以实现求和, 或筛选出符合条件记录计算总和。

Swift语法-高阶函数


高阶函数还可以链式使用(多级):

    let array = [1, 2, 3, 4, 5]
    let sum0 = array.filter{ $0 > 2}.reduce(0, +)
    print(sum0)  //12
     求数组里大于2的值之和。


组合调用:

      找出二维数组中所有的偶数。

let array = [[1,2,3], [4,5,6], [7,8,9] ]
let even = array.flatMap {  
    $0.filter { $0%2 == 0}
}
print(even)  //[2,4,6,8]

       如果使用基本二维数组遍历的语法就比较麻烦了:

//基本的二维数组遍历
var evenArr = [Int]()
for arr in array {
    for item in arr {
        if item % 2 == 0 {
            evenArr.append(item)
        }
    }
}
print(evenArr)