位置:首页 > Scala > 模式匹配基础使用教程与常见应用解析

模式匹配基础使用教程与常见应用解析

时间:2026-08-15  |  作者:云端旅人  |  阅读:0

内容:

1.Scala 中的模式匹配

(一)问题导入

今天接到一个开发需求:要根据身份证号码,判断并输出对应人员的籍贯信息。

说得更直白一点,就是通过身份证前两位代码来识别所属地区。

比如,42对应湖北,33对应浙江,11对应北京,31对应上海

(二)具体代码

package matchcase

/**
   match case

   三大结构
     1. 顺序结构
     2. 选择结构
        (1) if, if else if else;
        (2) match case
               case_ 不能省略,否则,匹配失败会报错
               case_ 必需写在最后
     3. 循环结构:
        (1) for
        (2) while, do...while
* */

object case01 {
  def main(args: Array[String]): Unit = {
//    val code = "11"
//    var 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的数字,打印它对应的英语单词。

package matchcase

object case02 {
  def main(args: Array[String]): Unit = {
    // 输入一个1~5的数字,打印它对应的英语单词
    val num = 2
    val word = num match {
      case 1 => "One"
      case 2 => "Two"
      case 3 => "Three"
      case 4 => "Four"
      case 5 => "Five"
      case _ => "Other"
    }
    println(s"${num} 对应的英文是:${word}")
  }
}

【运行结果】

(四)高阶匹配之元组元素数量

前面提到的几种匹配,本质上都属于精准匹配。

也就是说,变量必须和对应的值完全相等。

不过,scala 的模式匹配远不止这么“死板”。

它的规则其实很灵活。 匹配时不一定非要盯着具体的值,还可以按照元组中元素的数量来完成匹配。

package matchcase

/*
*  match case 高阶匹配
*   1.匹配元组不同的元素的数量
*
*
* */
object case03 {
  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("其他")
    }
  }
}

【运行结果】

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多