模式匹配-基础使用

27 阅读1分钟

(一)分析问题并解决

根据一个值输出另一个与之对应的值,很容易就想到if else

def main(args: Array[String]): Unit = {
    val code = 52
    var province = " "
    if(code == 42) {
      province = "湖北省"
    } else if (code == 52) {
      province = "四川省"
    }else{
      province = "未知"
    }
    println(province) 
  }
}

直接用 match case 来改造。

val code = 42
val province = code match {
  case 42 => "湖北省"
  case 52 => "四川省"
  case _ => "未知"
}
println(province)

(二)match case的基本格式

//
//
//

// 1.
val code = 10
// 2.
code match {
case 1 => println("one")

case _ => println("未知")
}

执行流程是:如果value匹配到了pattern1,就执行结果1,如果都没有匹配到,就执行 _ 对应的内容。

2——1匹配数据类型

package matchcase
/*
* match case
*  1.匹配精确值
*  2.匹配数据类型
* */

object matchcase03 {
  def processValue(value:Any):Unit = {
    value match {
      case x: Int => println("Int")
      case x: String =>println("String")
      case _ => println("other")
    }
  }

  def main(args: Array[String]): Unit = {
    val obj = 10
    processValue(obj)
  }
}

2——2匹配元素个数

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

package matchcase
/*
* match case
*  1.匹配精确值
*  2.匹配数据类型
*  3.匹配元素的个数
* */

object matchcase03 {
  def processValue(value:Any):Unit = {
    value match {
      case x: Int => println("Int")
      case x: String =>println("String")
      case _ => println("other")
    }
  }

  def processNum(value:Any):Unit = {
    value match {
      case (a,b,c) => println(s"三个元素的元组,第一个元素是${a}")
      case (x,y) => println("两个元素的元组")
      case _ => println("其他")
    }
  }

  def main(args: Array[String]): Unit = {
//    val obj = 10
//    processValue(obj)
    processNum( (1,2) )
    processNum( (1,2,3) )
  }
}