一. 变量声明中的模式匹配
需求:现在有一个数组Array(1,2,3,4,5),希望能定义三个变量,它们的值分别是数组中的第1,2,3个元素的值。
def main(args: Array[String]): Unit = {
val arr = Array(1,2,3,4,5)
// 定义三个变量, 分别设置初始值为arr的前三个元素的值?
var a = arr(0)
var b = arr(1)
var c = arr(2)
println(s"a = ${a} b = ${b} c = ${c}")
// 使用模式匹配, 将arr的前三个元素分别赋值给a, b, c
val Array(x,y,z,_*) = arr
// _* 占位符: 表示多的部分放在这儿
println(s"x = ${x} y = ${y} z = ${z}")
}
结果如图:
二. 守卫语句的格式
守卫语句紧跟在case模式之后,通过if关键字引入
格式如下:
value match {
case pattern if guardCondition => result
// 其他case语句...
}
其中,value是要进行匹配的值,pattern是匹配模式,guardCondition是守卫条件(一个布尔表达式),result是当该case分支匹配成功时返回的结果。
def main(args: Array[String]): Unit = {
val a = 11
a match {
case _:Int if a > 10 => println("a是大于10的Int")
case _ => println("a is not Int")
}
}
结果如图:
三. 案例-判断星座
def getZodiac(month: Int, day: Int): String = {
month match {
case 1 if day >= 20 => "水瓶座" // 月份是1月,且 日期是>=20 的
case 2 if day <= 18 => "水瓶座" // 月份是2月,且 日期是<=18 的
case 2 if day >= 19 => "双鱼座" // 月份是2月,且 日期是>=19 的
case 3 if day <= 20 => "双鱼座" // 月份是3月,且 日期是<=20 的
case 3 if day >= 21 => "白羊座" // 月份是3月,且 日期是>=21 的
case 4 if day <= 19 => "白羊座" // 月份是4月,且 日期是<=19 的
case 4 if day >= 20 => "金牛座" // 月份是4月,且 日期是>=20 的
case 5 if day <= 20 => "金牛座" // 月份是5月,且 日期是<=20 的
case 5 if day >= 21 => "双子座" // 月份是5月,且 日期是>=21 的
case 6 if day <= 21 => "双子座" // 月份是6月,且 日期是<=21 的
case 6 if day >= 22 => "巨蟹座" // 月份是6月,且 日期是>=22 的
case 7 if day <= 22 => "巨蟹座" // 月份是7月,且 日期是<=22 的
case 7 if day >= 23 => "狮子座" // 月份是7月,且 日期是>=23 的
case 8 if day <= 22 => "狮子座" // 月份是8月,且 日期是<=22 的
case 8 if day >= 23 => "处女座" // 月份是8月,且 日期是>=23 的
case 9 if day <= 22 => "处女座" // 月份是9月,且 日期是<=22 的
case 9 if day >= 23 => "天秤座" // 月份是9月,且 日期是>=23 的
case 10 if day <= 22 => "天秤座" // 月份是10月,且 日期是<=22 的
case 10 if day >= 23 => "天蝎座" // 月份是10月,且 日期是>=23 的
case 11 if day <= 21 => "天蝎座" // 月份是11月,且 日期是<=21 的
case 11 if day >= 22 => "射手座" // 月份是11月,且 日期是>=22 的
case 12 if day <= 21 => "射手座" // 月份是12月,且 日期是<=21 的
case 12 if day >= 22 => "摩羯座" // 月份是12月,且 日期是>=22 的
case 1 if day <= 19 => "摩羯座" // 月份是1月,且 日期是<=19 的
case _ => "未知"
}
}
def main(args: Array[String]): Unit = {
println(getZodiac(2, 17))
println(getZodiac(1, 21))
println(getZodiac(2, 19))
println(getZodiac(3, 20))
println(getZodiac(12, 22))
println(getZodiac(1, 19))
}
结果如图: