模式匹配-基础使用

26 阅读1分钟

分析问题并解决

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

match case的基本格式

格式如下

value match {

  case pattern1 => result1

  case pattern2 => result2

...

  case patternN => resultN

case _ => 其他

}

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

package matchcase

object matchcase2{

def main(args: Array[String]): Unit = {


//  输入1,输出单词one
//  输入2,输出单词two
//  输入3,输出单词three
//  输入其他,输出单词other


//  1.如果能精确匹配成功,就会执行后面的代码
//  2.case _它表示可以匹配任意的内容。一定要放在match case 的最后一条
//  3.case _不能省略:如果匹配不成功,就会报错


  val code=10
  code match{
    case 1=>println("one")
    case 2=>println("two")
    case _=>println("未知")
  }
  }

}

image.png

高阶匹配之元组元素数量

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

package matchcase

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

object matchcase4{

def maqtchArray(arr:Any):Unit= {
  arr match {
    case Array(1,b,c)=>println("匹配三个元素的数组,第一个元素是1")
    case Array(x,y)=>println("匹配到有两个元素的数组",x,y)
    case Array(a,b,c)=>println("匹配三个元素的数组",a,b,c)
    case Array(10,_*)=>println("第一个元素是10,元素的个数有任意个")
    case _=>println("没有匹配到")
  }
}

def main(args: Array[String]): Unit ={
//  val obj=10
//  processValue(obj)
  val arr1=Array(1,2,3)
  val arr2=Array(2,2,3)
  val arr3=Array(10,2,3,1)
  maqtchArray(arr1)
  maqtchArray(arr2)
  maqtchArray(arr3)
  

  }

}

image.png