例子:1.筛选数组中的偶数,2.筛选大于80的分数
1. 主方法定义
def main(args: Array[String]): Unit = { ... }
这是 Scala 程序的入口方法,args用于接收命令行参数,Unit表示该方法无返回值(类似 Java 的void)。
2. 筛选数组中的偶数
-
首先定义了一个整数数组
arr1 = Array(1, 2, 3, 4, 5) -
核心逻辑是使用
filter方法筛选偶数:val arr2 = arr1.filter(x => x%2 == 0)filter是 Scala 集合的高阶函数,接收一个 “判断条件”,返回一个新集合,仅包含满足条件的元素- 这里的条件
x => x%2 == 0表示:筛选出 “除以 2 余数为 0” 的元素(即偶数) - 因此
arr2的结果是Array(2, 4)
-
最后通过
arr2.foreach(println)遍历并打印筛选结果
3. 筛选高分(大于 80 分)
-
定义分数数组
score = Array(90,98,60,49,100) -
同样使用
filter方法筛选大于 80 分的成绩,并且链式调用foreach直接打印:score.filter(x => x>80).foreach(println)-
条件
x => x>80表示筛选出分数大于 80 的元素 -
符合条件的元素是
90,98,100,之后输出结果
-
补充
代码中注释掉的部分是filter方法的完整代码块写法:
// val arr2 = arr1.filter( x=> {
// // println(x) // 可添加额外逻辑(如打印中间值)
// x%2 == 0 // 筛选条件
// })
这与简化写法x => x%2 == 0功能一致,当筛选逻辑复杂时可以用代码块,简单逻辑则推荐简化写法。
下面是整体代码:
def main(args: Array[String]): Unit = {
// 把数值为偶数的留下来
val arr1 = Array(1, 2, 3, 4, 5)
// val arr2 = arr1.filter( x=> {
// // println(x)
// X%2 == 0
// })
val arr2 = arr1.filter(x => x%2==0)
arr2.foreach(println)
//把小于80分的值去掉,只保留大于80的分数
val score = Array(90,98,60,49,100)
score.filter(x => x>80).foreach(println)
}
数组累加
1. 主方法定义
def main(args: Array[String]): Unit = { ... }
这是 Scala 程序的入口方法,args用于接收命令行参数,Unit表示该方法没有返回值
2. 数组定义
val arr = Array(1, 2, 3, 4, 5)
val定义了一个不可变的整数数组arr,包含元素1, 2, 3, 4, 5
3. 计算累加和
// 用reduce方法计算累加和
val rst = arr.reduce((x, y) => x + y)
// 注释掉的是更简洁的写法:数组自带的sum方法
// val rst = arr.sum
reduce方法的作用:reduce是 Scala 集合的高阶函数,用于对集合元素进行 “归约” 操作。它接收一个二元函数,并从左到右依次对元素应用这个函数,最终将集合 “压缩” 为一个单一的值- 这里的计算过程:函数
(x, y) => x + y表示 “将两个参数相加”,reduce会按以下步骤执行:- 先取前两个元素:
1 + 2 = 3 - 用结果与下一个元素相加:
3 + 3 = 6 - 继续:
6 + 4 = 10 - 最后:
10 + 5 = 15因此,rst的结果是15。
- 先取前两个元素:
- 注释中的简化写法:
arr.sum是数组自带的求和方法,功能与reduce((x,y) => x + y)完全一致
4. 结果
println(s"rst = ${rst}")
使用 Scala 的字符串插值(s"...")打印结果
总结
代码通过reduce方法演示了如何对数组元素进行累加操作,本质是把两两相加的逻辑应用到整个数组,最终得到总和
下面是整体代码
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}")
}