Scala的模式匹配(五)

package hfd

//匹配 变量的类型
//匹配 数组: 元组的个数 + 元素的特征
object test34_5 {
  def main(args: Array[String]): Unit = {
    val arr1 = Array(1,2,3)
    val arr2 = Array(0,2,3)
    val arr3 = Array(1,2,3,4)
    val arr4 = Array(-1,1,2,3,4)

    val b:Any =arr1
    b match {
      case Array(1,x,y) => println(s"数组第一个元素是1,一共有3个元素${x},${y}")
      case Array(1,x,y,z) => println("数组第一个元素是1,一共有4个元素")
      case Array(_,1,_*) => println("数组第二个元素是1,一共有n个元素")
      case _ => println("其他")
    }
  }

}

package hfd

object test34_6 {

  case class Person(name:String)
  case class Student(name:String, className:String)

  //match case 能根据 类名和属性的信息,匹配到对应的类
  //注意:
  // 1.匹配的时候。 case class的属性个数要对上
  // 2. 属性名不属于一一对应
  def main(args: Array[String]): Unit = {
    val p1 = Person("小花")
    val s1 = Student("小明","2(3)班")

    val a:Any = p1
    a match {
      case Person(name) => println("普通人类",name)
      case Student(name,className) => println(className,"的学生",name)
      case _ => println("其他")
    }
  }

}

package hfd

object test34_7 {
  //需求:现在有一个数组Array(1,2,3,4),我希望能定义三个变量,它们的值分别是数组中的第1,2,3个元素的值
  def main(args: Array[String]): Unit = {
    val arr = Array(1,2,3,4,5)
//    第1个元素的值: arr(0)
//    println(arr(0))
//    var x = arr(0)
//    var y = arr(1)
//    var z = arr(2)
//    println(x,y,z)
    //有一个更简单的方式

    //模式匹配
    var Array(_,x,y,z,_*) = arr
    println(x)
    println(y)
    println(z)

  }

}

package hfd

object test34_8 {
  def main(args: Array[String]): Unit = {
    val m1 = Map(
      "阿里巴巴" -> 1964,
      "腾讯" -> 1971,
      "百度" -> 1968,
      "小米" -> 1969,
      "网易" -> 1971,
    )

//    val t = ("小米",1969) // 元组
//    println(t._2)
    //找出哪些是1971年?
    // 对于Map, 可以 for 遍历
    //模式匹配
    for ((k,1971) <- m1){
      println(k)
    }

  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值