Swift中Array高阶函数的使用

前言

在Swift中,有关于Array的高阶函数。这一点和JavaScript是一样的。也就是说,Swift也是支持函数式编程的。

关于Array有以下几个高阶函数:filter map reduce flatMap compactMap。其中前三个和JavaScript语言是一样的,不同的是语法不同而已。下面我们就来探索一下这5个高阶函数。掌握了这些高阶函数,可以让我们对于一些关于数组处理更加得心应手。

实践

  • filter函数:过滤,将数组中的元素按照一定的条件进行过滤 返回过滤后新数组
    • 传入函数/闭包表达式
    • 该函数/闭包表达式会执行n次,n代表数组中元素个数
    • 该函数/闭包表达式 必须返回Bool类型
    • 该函数/闭包表达式 接收一个参数,该参数就是每次遍历的数组中元素
    • 如果函数/闭包表达式返回值是true 就把该元素放入新的数组
    • 如果函数/闭包表达式返回值是false 该元素就会被过滤掉
let array = [1, 2, 3, 4]
let newArray = array.filter { (n) -> Bool in
    return n % 2 == 0
}
print(newArray) // [2, 4]

// 利用Swift语言的语法糖 上面的代码还可以进行进一步的简化
let newArray = array.filter { $0 % 2 == 0 }
print(newArray) // [2, 4]
  • map函数:将数组中元素进行映射处理,返回处理过后的新数组
    • 传入函数/闭包表达式
    • 该函数/闭包表达式会执行n次,n代表数组中元素个数
    • 该函数/闭包表达式接收一个参数,该参数就是每次遍历的数组元素
    • 该函数/闭包表达式返回处理后的内容,将处理后的内容添加到新的数组中(映射操作)
let array = [1, 2, 3, 4]
let newArray = array.map { n in
    return n * 2
}
print(newArray) // [2, 4, 6, 8]

// 简写
let newArray = array.map { $0 * 2 }
print(newArray) // [2, 4, 6, 8]
  • reduce函数:应用场景:汇总或者数组中每个元素的值和前一个值有关联的处理
    • 传入初始值和一个函数/闭包表达式
    • 该函数/闭包表达式会执行n次,n代表数组中元素个数
    • 该函数/闭包表达式接收2个参数,上一次遍历汇总的结果,和数组中的元素
    • 将汇总的结果作为返回值返回
let array = [1, 2, 3, 4]
let result = array.reduce(0) { (previousResult, n) in
    return previousResult + n
}
print(result) // 10

// 简写
let result = array.reduce(0) { $0 + $1 }
print(result) // 10
  • flatMap:和map对比着来理解
    • flatMap传入的函数/闭包表达式 必须返回sequence类型
    • 最终的返回值将sequence中的元素放入到新的数组中
    • 而map传入的函数/闭包表达式 直接将数组作为元素放入到新的数组中
let array = [1, 2, 3, 4]
let newArray = array.map { n in
    return Array(repeating: n, count: n)
}
print(newArray) // [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

let newArray2 = array.flatMap { n in
    return Array(repeating: n, count: n)
}
print(newArray2) // [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

// 简写
let newArray = array.flatMap { Array(repeating: $0, count: $0) }
print(newArray) // [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
  • compactMap:和map对比着理解
    • compactMap在进行元素映射的时候,会将nil过滤掉,并且会将可选项进行解包
let array = ["1", "flutter", "3", "Vue"]

let newArray = array.map { item in
    return Int(item)
}
print(newArray) // [Optional(1), nil, Optional(3), nil]

let newArray2 = array.compactMap { item  in
    return Int(item)
}

print(newArray2) // [1, 3]

// 简写
let newArray = array.compactMap { Int($0) }
print(newArray) // [1, 3]

你可能感兴趣的:(Swift中Array高阶函数的使用)