scala part4 黑马,匹配

匹配类型

    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)

猜你喜欢

转载自blog.csdn.net/qq_40473204/article/details/113863890