[Swift 开发] Swift高阶函数:Map,Filter,Reduce

时间:2021-03-25 18:30:08


1: map用于将每个数组元素通过某个方法进行转换。
    例如:
    我们用一个Int类型数组存储商品金额,想把每个金额后面添加一个字符“.00元”,把数组转成字符串数组

let numbers2 = [10, 15, 99, 66, 25];
let totalNumber2 = numbers2.map({money in "(money)元"})
print(totalNumber2)

     使用 flatMap 函数替代 map 函数的原因在于前者能够忽略可选值为 nil 的情况。例如flatMap([0,nil,1,2,nil]) 的结果是[0,1,2]。处理那些没有 city 属性的情况这 会非常有用。


2: filter用于选择数组元素中满足某种条件的元素。

    使用前面金额的例子,筛选出金额大于30元素,结果应该是[99,66]
let numbers2 = [10, 15, 99, 66, 25];
let totalNumber2 = numbers2.filter { money in money > 30}
print(totalNumber2)
   

    证明字符串中含有某个单词

let words = ["Swift","iOS","cocoa","OSX","tvOS"]
let tweet = "This is an example tweet larking about Swift"

let valid = !words.filter({tweet.containsString($0)}).isEmpty

    或者

words.contains(tweet.containsString)


3:reduce方法把数组元素组合计算为一个值。

   我们使用上面例子计算数组元素的和,结果应该为215

let numbers2 = [10, 15, 99, 66, 25];
let totalNumber2 = numbers2.reduce(200, combine: { $0+$1 })
print(totalNumber2)

  反转数组:

// $0 指累加器(accumulator),$1 指遍历数组得到的一个元素
[1, 2, 3, 4, 5].reduce([Int](), combine: { [$1] + $0 })
// 5, 4, 3, 2, 1