高阶函数(Swift):

高阶函数是迅速进行功能编程的概念。

听起来很复杂,但相反却很简单。

定义:可以接受函数或闭包作为参数或返回一个函数/闭包的函数称为高阶函数。

有许多高阶函数,我们将研究其中最广泛使用的一些函数:map,flatMap,filter,reduce和sorted。

返回一个数组,其中包含将给定闭包映射到序列的元素上的结果。

进口基金会

让数组= [1,2,3,4,5]

// map使用一个参数关闭,并将更改逐一应用于数组的每个元素。

让mapArray = = array.map({num in

数* 100

})

打印(mappedArray)

//使用尾随闭包来简化地图

让mapArray = array.map {$ 0 + 5}

打印(mapArray)

宣言:

  func flatMap (_转换:(Self.Element)抛出-> SegmentOfResult)重新抛出-> [SegmentOfResult.Element] whereSegmentOfResult:Sequence 

FlatMap非常喜欢Map,但是顾名思义,它可以使结果变平,因此,如果您有array(嵌套数组)的数组,并且使用了flatmap,那么它将提供合并了嵌套数组所有元素的级联数组。

进口基金会

让数组= [[“ Dhoni”,“ Ganguly”],[“ Kohli”,“ Rahul”],[“ Yuvraj”,“ Rohit”,“ Bhumrah”]]

让flatmap1 = array.flatMap {$ 0}

打印(flatmap1)

让arr = [“ 1”,“ 2”,“ 3”,“ 10”,“ Johar”,“ Mon”,“ 12”]

让mapResult = arr.map {Int($ 0)}

打印(mapResult)

让flatMapResult = arr.flatMap {Int($ 0)}

打印(flatMapResult)

这样我们可以看到map和flatmap之间的区别,map返回结果无需处理,但是flatmap是智能的

它不仅解开结果,而且从结果中删除nil。

当转换为每个元素生成序列或集合时,请使用此方法接收单级集合。

返回使用给定的闭包组合序列元素的结果。

宣言:

func reduce(_ initialResult : Result, _ nextPartialResult : (Result,Self.Element) throws -> Result) rethrows -> Result

进口基金会

让数组= [10,2,3,1,2,3,2]

让reduceResult = array.reduce(0,{x,y in

x + y

})

打印(reducedResult)

让reduceResult2 = array.reduce(1,{

$ 0 * $ 1

})

打印(reduceedResult2)

输出:

23
720

返回一个数组,该数组按顺序包含满足给定谓词的序列中的元素。

宣言:

  func filter(_ isIncluded :(Self.Element)抛出-> Bool)重新抛出-> [Self.Element] 

进口基金会

让strArr = [“ Abhishek”,“ Ganga”,“ Disha”,“ Choi”,“ Taj Mahal”]

//我们希望元素的长度小于5

让filterArr = strArr.filter({

name.count <= 5

})

打印(filteredArr)

输出: [“ Ganga”,“ Disha”,“ Choi”]

返回序列中的元素,使用给定谓词作为元素之间的比较进行排序。

进口基金会

枚举HTTPResponse {

情况还可以

大小写错误(整数)

}

让响应:[HTTPResponse] = [.error(500)、. ok,.ok,.error(404)、. error(402)]

让sortedResponses = response.sorted {

切换($ 0,$ 1){

//按代码排序错误

大小写让(.error(codeA),. error(codeB)):

返回代码A <代码B

//所有成功都是等价的,因此没有一个比其他任何成功更重要。

大小写(.ok,.ok):

返回假

//成功之前订购错误

case(.error,.ok):返回true

case(.ok,.error):返回false

}

}

打印(sortedResponses)

让学生:Set = [“ Kofi”,“ Abena”,“ Peter”,“ Kweku”,“ Akosua”,“ Aakash”]

让sortedStudents = students.sorted {

$ 0 <$ 1

}

打印(sortedStudents)

输出:

[HTTPResponse.error(402),HTTPResponse.error(404),HTTPResponse.error(500),HTTPResponse.ok,HTTPResponse.ok]

[“ Aakash”,“ Abena”,“ Akosua”,“ Kofi”,“ Kweku”,“ Peter”]

Interesting Posts