一:什么是高阶函数
高阶函数:是一种特殊的函数,特殊之处在于:它指使用其他函数作为参数或者返回值。
Scala的常见高阶函数包括Array.map、flatten、flatmap、foreach、reduce、filter和fold等。
二:map函数
作用:通过对数组的每一个元素应用一个函数来构建一个新数组。
语法: 新数组 = 旧数组.map(旧元素=>新元素)
任务一:把数组(1,2,3,4,5) → (2,4,6,8,10)
object txy47 {
def main(args: Array[String]): Unit = {
val ar = Array(1,2,3,4,5)
val arr = ar.map( x => x*2)
for(i <- ar){
println(i)
}
for(j <- arr){
println(j)
}
}
}
任务二:把数组(1,2,3,4,5) -> (1,4,9,16,25)
object txy47 {
def main(args: Array[String]): Unit = {
val ar = Array(1,2,3,4,5)
val arr = ar.map( x => x*x)
for(i <- ar){
println(i)
}
for(j <- arr){
println(j)
}
}
}
任务三:把数组(-1,-2,-3,-4) -> (1,2,3,4)(求绝对值)
object txy49 {
def main(args: Array[String]): Unit = {
val ar = Array(-1,-2,-3,-4)
val arr = ar.map( x => if(x>0)x else -x)
for(i <- ar){
println(i)
}
for(j <- arr){
println(j)
}
}
}
三:foreach函数
作用:对数组的每一个元素应用函数。
语法:数组.foreach(元素=>{})
任务: 打印数组中的元素
object txy50 {
def main(args: Array[String]): Unit = {
val ar = Array(1,2,3,4,5)
ar.foreach(println)
}
}
四:filter函数
作用:对数组元素使用函数进行过滤。
语法:新数组= 旧数组.filter(元素=>bool) 它的参数是一个函数,这函数的返回值是布尔值。如果返回为true就保留。
任务一:在数组中找出元素是偶数的,并组成新数组。(1,2,3,4,5) → (2,4)
object txy50 {
def main(args: Array[String]): Unit = {
val ar = Array(1,2,3,4,5)
val arr = ar.filter(x => x%2 ==0 )
arr.foreach(println)
}
}
任务二:去掉不及格分数
object txy51 {
def main(args: Array[String]): Unit = {
val ar = Array(49,60,76,56,78)
val arr = ar.filter(x => x>=60)
arr.foreach(println)
}
}
五:flatten函数
作用:将二维数组中的元素展平至单数组中。
语法:二维数组.flatten。不需要写()
object txy52 {
def main(args: Array[String]): Unit = {
val ar = Array( Array(1,2,3), Array(4,5,6))
println(ar(0)(0))
val arr = ar.flatten
arr.foreach(println)
}
}
六:reduce
作用:reduce 是一种集合操作,用于对集合中的元素进行聚合操作,返回一个单一的结果。它通过指定的二元操作(即取两个元素进行操作)对集合中的所有元素进行递归处理,并最终将其合并为一个值
语法:reduce 函数需要一个函数作为参数,这个函数接受两个相同类型的参数,并返回一个值。
object txy53 {
def main(args: Array[String]): Unit = {
val ar = Array(1,2,3,4,5)
var arr = ar.reduce((x,y) => x + y)
println(arr)
}
}
reduceLeft-reduceRight
reduceLeft是从集合的左侧开始聚合,与reduce等价; reduceRight是从集合的右边开始。
println( Array(1,2,3).reduceRight((x,y)=>x-y) ) // (1 - (2 - 3)) = (1 - (-1)) = 2
println( Array(1,2,3).reduceLeft((x,y)=>x-y) ) // ((1-2)-3)
任务:计算数组中的最大最小值
object txy54 {
def main(args: Array[String]): Unit = {
val ar = Array(1,2,3,4)
val max = ar.reduce((x,y) => if (x>y) x else y)
println(max)
val min = ar reduce((x,y) => if (x>y) y else x)
print(min)
}
}
七:fold
作用:fold 是一种集合操作(与reduce类似),用于对集合中的元素进行聚合操作,返回一个单一的结果,需要提供一个初始的“种子”值。
语法:数组.fold(初值)(函数)
计算带初值的累积
object txy56 {
def main(args: Array[String]): Unit = {
val ar = Array(1,2,3,4)
val arr = ar.fold(10)((x,y) => x+y)
//初始值为10
print(arr)
//结果为10+1+2+3+4=20
}
}
八:sorted函数
功能:对元素进行排序。它会直接使用元素自身的自然顺序进行排序
语法:新数组 = 原数组.sorted
对数值排序,对字符串排序
object txy57 {
def main(args: Array[String]): Unit = {
val ar = Array('a','b','f','t','m')
//a,b,f,m,t
val ar1 = Array(1,4,6,3,545,124,-123)
//-123,1,3,4,6,124,545
val arr = ar.sorted
val arr1 = ar1.sorted
arr.foreach(println)
arr1.foreach(println)
}
}
九:sortedWith
如何将Array(-1,0,1,3,2)中的所有元素,按它们到0点的距离排序?
功能:按自定义规则排序
语法:新数组 = 原数组.sortedWith(排序函数)
排序函数:(元素a,元素b)=>Bool。如果返回 true,则 表示元素a应排在元素b之前。
object txy58 {
def main(args: Array[String]): Unit = {
val ar = Array(-1,0,-3,-2,-5,4,3,7)
val arr = ar.sortWith((a,b) => Math.abs(a-0) < Math.abs(b-0))
//判断Math.abs(a-0)<Math.abs(b-0)如果为true则返回a排在b前面
arr.foreach(println)
}
}