模式匹配-基础使用

58 阅读1分钟

一、 问题 导入

我们今天接到一个开发任务,就是根据身份证号码,输出这个人的籍贯。例如:42表示湖北,33表示浙江,11表示北京,31表示上海。

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}")
}

前面的匹配都是精准匹配:变量和值是相等的。但是呢,scala中的模式匹配的规则是非常强大的,不一定是精准的匹配值,还可以根据元组的元素的个数来匹配。

/*
match case 高级匹配
1. 匹配元组不同的元素的数量
2. 匹配数组特殊值
*/
def main(args: Array[String]): Unit = {
  // 元组
  val t1 = (1,2)
  t1 match {
    case (a,b) => println(s"有二个元素${a}, ${b}")
    case _ => println("未知")
  }

  val arr1 = Array(10,2)
  arr1 match {
    case Array(1,x,_) => println("数组,第一个元素是1,长度为3")
    case Array(10,x) => println("数组,第一个元素是10,长度为2")
    case _ => println("其他")
  }
}