排序
1. 主方法定义
def main(args: Array[String]): Unit = { ... }
这是 Scala 程序的入口方法,args用于接收命令行参数,Unit表示方法无返回值
2. 对数值数组排序
// 定义包含正负整数的数组
val arr = Array(-1, 10, -2, 1, 2, 3).sorted
// 遍历打印排序后的结果
arr.foreach(println)
-
sorted是 Scala 集合的排序方法,对于数值类型(如Int),默认按照从小到大的自然顺序排序。 -
原数组为
[-1, 10, -2, 1, 2, 3],排序后结果为[-2, -1, 1, 2, 3, 10]。
3. 对字符串数组排序
// 定义字符串数组并排序
var arr2 = Array("zoom", "bus", "apple", "banana", "car").sorted
// 遍历打印排序后的结果
arr2.foreach(println)
-
对于字符串类型,
sorted默认按照字典顺序 排序 -
原数组为
["zoom", "bus", "apple", "banana", "car"],排序后结果为["apple", "banana", "bus", "car", "zoom"]。 -
最终打印结果
总结
sorted方法是 Scala 中对集合进行排序的便捷方法,其排序规则由元素类型的默认顺序决定:
- 数值类型:按数值大小升序排列
- 字符串类型:按字典顺序排列
下面是整体代码
//sorted:排序
def main(args: Array[String]): Unit = {
// 对数值元素排序: 从小到大排序
val arr = Array(-1,10,-2,1,2,3).sorted
arr.foreach(println)
//对字符元素排序,字典顺序
var arr2 = Array("zoom","bus","apple","banana","car").sorted
arr2.foreach(println)
}
自定义排序
1. 方法:sortWith
sortWith 是 Scala 中数组的一个排序方法,用于自定义排序规则它接收一个匿名函数 (x, y) => 布尔值 作为参数,规则是:
- 当函数返回
true时,x排在y前面 - 当函数返回
false时,y排在x前面
2. 排序规则解析
代码中传入的排序函数是:
(x, y) => Math.abs(x - 1) < Math.abs(y - 1)
Math.abs(x - 1)计算元素x与数字1的距离(绝对值,保证距离非负)- 整个函数的含义是:如果
x到 1 的距离小于y到 1 的距离,则x排在y前面,否则y排在前面。
3. 原数组与计算过程
原数组为:Array(-1, 10, -2, 1, 2, 3)
先计算每个元素到 1 的距离:
-1到 1 的距离:| -1 - 1 | = 210到 1 的距离:| 10 - 1 | = 9-2到 1 的距离:| -2 - 1 | = 31到 1 的距离:| 1 - 1 | = 02到 1 的距离:| 2 - 1 | = 13到 1 的距离:| 3 - 1 | = 2
4. 排序结果
按照距离从小到大排序后,数组元素顺序为:
1 (距离0)→ 2(距离1)→ -1(距离2)→ 3(距离2)→ -2(距离3)→ 10(距离9)
arr.foreach(println) 会依次打印排序后的元素
下面是整体代码
//sorWith:自定义排序
//sorWith((x,y)=> 布尔值)
//(1) 如果返回值是true,那么x就在y的前面
//(2) 如果返回值是false,那么x就在y的后面
def main(args: Array[String]): Unit = {
// 对数值元素排序: 按照距离1这个点的距离的从小到大排序
val arr = Array(-1,10,-2,1,2,3).sortWith((x,y) => Math.abs(x - 1) < Math.abs(y - 1) )
arr.foreach(println)
}