(一)分析问题并解决
根据一个值输出另一个与之对应的值,很容易就想到if else 代码如下:
package matchcase
object case01 {
/*
* 三大结构
* 1.顺序结构
* 2.选择结构
* (1) if, if else if else;
* (2) match case
*/
def main(args: Array[String]): Unit = {
// val code = "11"
// val province=""
//
// if(code == "42") {
// province = "湖北"
// } else if (code== "11") {
// province = "北京"
// }else{
// province = "未知"
// }
val code = "11"
val province = code match{
case "42" => "湖北"
case "11" => "北京"
case _ => "未知"
}
println(s"${code} 对应的省份是 : ${province}")
}
}
结果如下:
(二)match case的基本格式
格式如下
value match {
case pattern1 => result1
case pattern2 => result2
...
case patternN => resultN
case _ => 其他
}
执行流程是:如果value匹配到了pattern1,就执行结果1,如果都没有匹配到,就执行 _ 对应的内容。
通过例子来巩固下
输出一个1-5的数字,打应它对应的英文单词
val num = 5
val result = num match {
case 1 => "One"
case 2 => "Two"
case 3 => "Three"
case 4 => "Four"
case 5 => "Five"
case _ => "Other"
}
println(result)
(三)高阶匹配之元组元素数量
前面的匹配都是精准匹配:变量和值是相等的。但是呢,scala中的模式匹配的规则是非常强大的,不一定是精准的匹配值,还可以根据元组的元素的个数来匹配
代码如下:
package matchcase
object case03 {
/*
* 三大结构
* 1.顺序结构
* 2.选择结构
* (1) if, if else if else;
* (2) match case
*/
def main(args: Array[String]): Unit = {
// 元组
val t1=(2,3)
t1 match {
case (a,b) => println(s"有两个元素${a},${b}")
case _=> println("未知")
}
val arr1 = Array(10,2)
arr1 match{
case Array(1,x,y)=> println("数组,第一个元素是1,长度为3")
case Array(10,x)=> println("数组,第一个元素是10,长度为2")
case _=> println("其他")
}
}
}
结果如下: