模式匹配-基础使用

56 阅读4分钟

1.match case的基本格式

/*
*
* 任务:
*   1.编写一个函数,输入省份编号,返回省份的名称
*      42 湖北
*      11 北京
*
* match case 的用法
* (1)类似于if else if 这种多分支选择结构,精确匹配值
* // 1.case _是不可省略的。如果匹配不成功,又没有case_,则程序报错
* // 2.case _必须要放在最后
 */
object matchcase01 {
  def main(args: Array[String]): Unit = {
    println(getProvinceName(11))
    println(getProvinceName(42))
    println(getProvinceName(12))
  }
  def getProvinceName(code:Int):String={
    code match {
      case 42 => "湖北"
      case 11 => "北京"
      case _ => "未知"
    }
  }

}

2.高阶匹配之元组元素数量

/*
*
* 任务:
*   1.编写一个函数,输入省份编号,返回省份的名称
*      42 湖北
*      11 北京
*
* match case 的用法
* (1)类似于if else if 这种多分支选择结构,精确匹配值
* // 1.case _是不可省略的。如果匹配不成功,又没有case_,则程序报错
* // 2.case _必须要放在最后
 */
object matchcase02 {
  def main(args: Array[String]): Unit = {
    val xiaohong = (100,100,100)
    val xiaoming = (89,98)

    getScore(xiaohong)
    getScore(xiaoming)

    }

  def getScore(score:Any): Unit ={
    score match {
      case (a, b, c) => println("元组中有三个元素:a = " + a + "  b = " + b + "  c = " + c)
      case (a, b) => println("元组中有两个元素:a = " + a + "  b = " + b)
      case _ => println("未知")
    }
  }
}

3.高阶匹配之变量类型匹配

/*
*
* 任务:
*   1.编写一个函数,输入省份编号,返回省份的名称
*      42 湖北
*      11 北京
*
* match case 的用法
* (1)类似于if else if 这种多分支选择结构,精确匹配值
* // 1.case _是不可省略的。如果匹配不成功,又没有case_,则程序报错
* // 2.case _必须要放在最后
* (2)匹配元组元素的数量
* (3)匹配变量类型
*
 */
object matchcase03 {
  def main(args: Array[String]): Unit = {
    testType(1)
    testType(1.1)
    testType("1")
    }

  def testType(i:Any): Unit ={
    i match {
      case x:Int => println("当前变量是:Int")
      case x:Double => println("当前变量是:Double")
      case _ => println("未知")

    }
  }
}

4.高阶匹配之匹配元素特征

/*
*
* 任务:
*   1.编写一个函数,输入省份编号,返回省份的名称
*      42 湖北
*      11 北京
*
* match case 的用法
* (1)类似于if else if 这种多分支选择结构,精确匹配值
* // 1.case _是不可省略的。如果匹配不成功,又没有case_,则程序报错
* // 2.case _必须要放在最后
* (2)匹配元组元素的数量
* (3)匹配变量类型
* (4)匹配元素特征
*
 */
object matchcase04 {
  def main(args: Array[String]): Unit = {
    testType(Array(1,2,3))
    testType(Array(1,2,3,4))
    testType(Array(11,2,3,4))
    testType(Array(11,1,3,4))
    }

  def testType(arr:Any): Unit ={
    arr match {
      case Array(1,x,y) => println("arr是一个数组,有三个元素,第一个是1")
      case Array(1,x,y,z) => println("arr是一个数组,有四个元素,第一个是1")
      case Array(x,1,y,z) => println("arr是一个数组,有四个元素,第一个是1")
      case _ => println("未知")
    }
  }
}

5.样例类及其属性

/*
*
* 任务:
*   1.编写一个函数,输入省份编号,返回省份的名称
*      42 湖北
*      11 北京
*
* match case 的用法
* (1)类似于if else if 这种多分支选择结构,精确匹配值
* // 1.case _是不可省略的。如果匹配不成功,又没有case_,则程序报错
* // 2.case _必须要放在最后
* (2)匹配元组元素的数量
* (3)匹配变量类型
* (4)匹配元素特征
* (5)样例类及其属性
*
 */
object matchcase05 {
//定义一个样例类:圆形。它有一个属性:半径
    case class Circle(radius:Double)
//定义一个样例类:矩形。它有两个属性:长和宽
    case class Rectangle(width:Double,height:Double)

//定义一个方法,用来求圆形,矩形的面积
    def getArea(obj:Any): Unit ={
      obj match {
        case Circle(radius) => println("圆形的面积是:" + radius * radius * 3.14)
        case Rectangle(width,height) => println("矩形的面积是:" + width * height)
        case _ => println("未知")
      }
    }

    def main(args: Array[String]): Unit = {
      getArea(Circle(2))
      getArea(Rectangle(2,3))
      getArea("abc")
      }
}

6.变量声明中的模式匹配

/*
*
* 任务:
*   1.编写一个函数,输入省份编号,返回省份的名称
*      42 湖北
*      11 北京
*
* match case 的用法
* (1)类似于if else if 这种多分支选择结构,精确匹配值
* // 1.case _是不可省略的。如果匹配不成功,又没有case_,则程序报错
* // 2.case _必须要放在最后
* (2)匹配元组元素的数量
* (3)匹配变量类型
* (4)匹配元素特征
* (5)样例类及其属性
* (6)变量声明中的模式匹配
*
 */
object matchcase06 {

  def main(args: Array[String]): Unit = {
    val arr = Array(1,2,3,4,5)

    //定义三个变量,分别设置初始值为arr的前三个元素的值?
    var a = arr(0)
    var b = arr(1)
    var c = arr(2)
    println("a = " + a + "  b = " + b + "  c = " + c)

    //使用模式匹配,将arr中的元素赋值给a,b,c
    val Array(x,y,z,_*) = arr
    //_* 占位符,表示多的部分放在这
    println("x = " + x + "  y = " + y + "  z = " + z)
  }
}