package gxy
object Test16 {
def main(args: Array[String]): Unit = {
//scala 的 reduce
//定义一个数组
Array(1,2,3,4,5)
//求和 (1,2,3,4,5) ===> 一个值
//求和 (1,2,3,4,5) ===> 一个值
// val res1 = Array(1,2,3,4,5).reduce( (x,y) => x+y )
// val res2 = Array(1,2,3,4,5).reduceLeft( (x,y) => x+y )
// val res3 = Array(1,2,3,4,5).reduceRight( (x,y) => x+y)
// println(res1,res2,res3) //15,15,15
val res2 = Array(1, 2, 3,4,5).reduceLeft((x, y) => x - y)
val res3 = Array(1, 2, 3,4,5).reduceRight((x, y) => x - y)
println(res2,res3) //-13,3
//计算最大值,最小值
val res4 = Array(-1,2,10,55).reduce( (a,b) => {if(a>b) a else b})
val res5 = Array(-1,2,10,55).reduce( (a,b) => {if(a<b) a else b})
println(res4,res5) //55,-1
//scala的 fold 作用:带初始值的reduce
// 格式: fold(初始值)(二元函数 => 返回值)
// val res1 = Array(1000,1500,1800,2000).fold(100000)((x,y)=>x+y)
// println(res1)
val res1 = Array(1000, 1500, 1800, 2000).fold(100000)((x, y) => if(x>y) y else x)
println(res1) //1000
//scala的sorted
//作用:排序,按自然顺序对数组元素排序(数字:从小到大,字母:字典顺序),返回排序之后的新数组
//var arr1 = Array(1,2,0,1,3,-1).sorted
//注意:不加()
var arr1 = Array("a","f","apple","park","zoom","school").sorted
//打印一个数组
arr1.foreach(println)
//scala的sortWith
//作用:排序函数返回 ture 表示第一个元素应该排在第二个函数之前
// Array(-1,0,1,3,2).sortWith((a,b) => boolean)
//数字a,到0点的距离是 |a-0|
// Array(-1,0,1,3,2).sortWith((a,b) => math.abs(a-0) < math.abs(b-0) ).foreach(println)
//练习:按它们到2点的距离从大到小排列
Array(-1,0,1,3,2).sortWith((x,y) => math.abs(x-2) > math.abs(y-2) ).foreach(println)
}
}