匹配类型
val a:Any = "hadoop"
val result1 = a match {
case x:String => s"${x}是一个String类型的数据"
case x:Int => s"${x}是一个Int类型的数据"
case x:Double => s"${x}是一个Double类型的数据"
case _ => "未匹配"
}
println(result1)
//x未被使用,则可以使用下划线替代
守卫
var num = StdIn.readInt()
num match {
case num if num >= 0 && num <= 3 => println("{0-3}")
case num if num >= 4 && num <= 8 => println("{4-8}")
case _ => "未匹配"
}
匹配样例类
case class Customer(name:String, age :Int)
case class Order(id:Int)
def main(args: Array[String]): Unit = {
var c:Any = Customer("zhangsan",23)
c match {
case Customer(a,b) => println(s"Customer类型对象,name=${a},age=${b}")
case Order(a) => println(s"Order类型对象,id=${a}")
case _ => "未匹配"
}
}
匹配数组
var arr1 = Array(1,2,3)
val arr2 = Array(0)
val arr3 = Array(0,1,2,3,4,5)
arr1 match {
//长度为3,首元素为1
case Array(1,x,y) => println(s"Customer")
//只有一个元素0
case Array(0) => println(s"O}")
//0开头,后面接任意元素,因为后面的元素可能是多个,所以有*
case Array(0,_*) => println(s"sdfg")
case _ => "未匹配"
}
匹配列表
val list1 = List(0)
val list2 = List(0,1,2,3,4,5)
val list3 = List(11,22)
list1 match {
case List(0) => println(s"O")
case List(0,_*) => println(s"Customer")
case List(x,y) => println(s"sdfg")
case _ => "未匹配"
}
list1 match {
case 0 :: Nil => println(s"O")
case 0 :: tail => println(s"Customer")
case x :: y :: Nil => println(s"sdfg")
case _ => "未匹配"
}
匹配元组
val tuple1 = (1,2,3)
val tuple2 = (3,4,5)
tuple1 match {
//一开头,长度为三
case (1,x,y) => println(s"Customer")
case (x,y,5) => println(s"sdfg")
case _ => "未匹配"
}
变量声明中的模式匹配
val arr = (0 to 10).toArray
val Array(_,x,y,z,_*) = arr
println(x,y,z)
val list1 = (0 to 10).toList
val List(w,r,_*) = list1
println(w,r)
匹配for表达式
val map1 = Map("zs" -> 23,"ls" -> 24,"ww" -> 23,"zl" -> 26)
for((k,v) <- map1 if v == 23) println(k,v)
for((k,23) <- map1) println(k,23)