首先在代码里面总有一些属于过滤器的东西,就好比满分100分,一个班级,需要筛选90份以上的学生,假如这个班人数少,还好一点,可是一个班级人数多起来,就会变得非常麻烦,所以,这个时候就用到了过滤器
1.筛选成绩的过滤器
当我给出一组数,我需要从里面找出80分以上的人,那我可以选择敲击以下代码
object base49 {
def main(args: Array[String]): Unit = {
// 把数值为偶数的留下来
val arr1 = Array(1,2,3,4,5)
val arr2 = arr1.filter(x => x%2==0)
arr2.foreach(println)
// 把小于80分的值去掉,只保留大于80分的分数
var score = Array(90,98,60,49,100)
val scoreFiltered = score.filter(score => score > 80)
scoreFiltered.foreach(println)
}
}
运行结果只会显示90,98,100,还有上面的偶数2,4,如图所示:
2.一直相加
假如我给你一个数组,需要你把这里的内容全部相加,和标题一一样,元素少还好,元素多起来就不好了。面对这个问题,可以输入以下代码:
object base50 {
def main(args: Array[String]): Unit = {
val arr = Array(1,2,3,4,5)
// 求数组元素的累加
val rst = arr.reduce( (x,y)=> x + y )
//val rst = arr.sum
println(s"rst = ${rst}")
}
}
运行结果只能是15,如图所示:
3.有方向的相减
上面的问题只是一直相加,相加从左往右和从右往左的结果是一样的,可是减法不一样,减法有它自己的两种结果,依然给出一个数组,可以试试输入以下代码:
object base51 {
// reduce ==== reduceLeft 从左向右计算
// reduceRight 从右向左计算
def main(args: Array[String]): Unit = {
val arr = Array(1,2,3)
val rst = arr.reduceLeft( (x,y)=> x - y )
val rst1 = Array(1,2,3,4).reduceRight( (x,y)=> x - y )
println(s"rst = ${rst}")
println(s"rst1 = ${rst1}")
}
}
运行结果如图所示:
4.排序问题
有的时候,我们需要按照数字大小进行排序,或者在一堆英文里面,我们为了记住单词,会选择按照26字母进行记忆,所以就有了以下代码:
object base52 {
// sorted: 排序
def main(args: Array[String]): Unit = {
// 对数值元素排序:从小到大排序
var arr = Array(-1,10,-2,1,2,3).sorted
arr.foreach(println)
// 对字符元素排序,字典顺序
var arr2 = Array("zoom", "bus","apple", "banana", "car").sorted
arr2.foreach(println)
}
}
它的运行结果如图所示:
如果你还能想出某些排序的方式,可以自己尝试一下
object base53 {
// sortWith: 自定义排序
// sortWith( (x,y) => 布尔值 )
// (1)如果返回值是true,那么x就在y的前面
// (1)如果返回值是false,那么x就在y的后面
def main(args: Array[String]): Unit = {
// 对数值元素排序:按照离 1 这个点的距离的从小到大排序
var arr = Array(-1,10,-2,1,2,3).sortWith((x,y) => Math.abs(x - 1) < Math.abs(y - 1) )
arr.foreach(println)
}
}