模式匹配-基础使用(

35 阅读1分钟

(一)分析问题并解决

根据一个值输出另一个与之对应的值,很容易就想到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}")
  }

}

结果如下:

image.png

(二)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("其他")
    }
  }

}

结果如下: image.png