• Scala基础:模式匹配和样例类


    模式匹配

    package com.zy.scala
    
    import scala.util.Random
    
    /**
      * 模式匹配
      */
    object CaseDemo {
      def main(args: Array[String]): Unit = {
        //匹配字符串
        val arr1 = Array(" hadoop", " zookeeper", " spark ")
        val name = arr1(Random.nextInt(arr1.length))
        name match {
          case " hadoop " => println(" 大数据分布式存储和计算框架 ...")
          case " zookeeper " => println(" 大数据分布式协调服务框架 ...")
          case " spark " => println(" 大数据分布式内存计算框架 ...")
          case _ => println("  我不认识你 ...")
        }
    
        //匹配数据类型
        val arr2 = Array("hello", 1, 2.0, CaseDemo)
        val v = arr2(Random.nextInt(4))
        println(v)
        v match {
          case x: Int => println("Int " + x)
          case y: Double if (y >= 0) => println("Double " + y)
          case z: String => println("String " + z)
          case _ => throw new Exception("not match exception")
        }
    
        //匹配数组
        val arr = Array(1, 3, 5)
        arr match {
          case Array(1, x, y) => println(x + " " + y)
          case Array(0) => println("only 0")
          case Array(0, _*) => println("0 ...")
          case _ => println("something else")
        }
    
        //匹配集合
        val lst = List(3, -1)
        lst match {
          case 0 :: Nil => println("only 0")
          case x :: y :: Nil => println(s"x: $x y:$y")
          case 0 :: tail => println("0 ...")
          case _ => println("something else")
        }
    
        //匹配元组
        val tup = (1, 3, 7)
        tup match {
          case (1, x, y) => println(s"1, $x , $y")
          case (_, z, 5) => println(z)
          case _ => println("else")
        }
    
        /**
          * 注意:在 Scala 中列表要么为空(Nil 表示空列表)要么是一个 head 元素加上一个 tail 列表。
          * 9 :: List(5, 2) :: 操作符是将给定的头和尾创建一个新的列表
          * 注意::: 操作符是右结合的,如 9 :: 5 :: 2 :: Nil 相当于 9 :: (5 :: (2 :: Nil))
          */
      }
    }

    样例类的模式匹配

    package com.zy.scala
    
    import scala.util.Random
    
    //样例类
    case class SubmitTask(id: String, name: String)
    
    case class HeartBeat(time: Long)
    
    case object CheckTimeOutTask
    
    object CaseClsDemo {
      def main(args: Array[String]): Unit = {
    
        //模式匹配 样例类
        val arr = Array(CheckTimeOutTask, HeartBeat(12333), SubmitTask("0001", "task- - 0001"))
        arr(Random.nextInt(arr.length)) match {
          case SubmitTask(id, name) => {
            println(s" $id , $name")
          }
          case HeartBeat(time) => {
            println(time)
          }
          case CheckTimeOutTask => {
            println("check")
          }
        }
      }
    }
  • 相关阅读:
    积性函数大全(欧拉函数、莫比乌斯反演、杜教筛……)
    Codeforces 1427 G.One Billion Shades of Grey
    Codeforces Global Round 11 A-F题解
    一般难度模板复习
    (补充)证明线性递推相关的Hamilton-Cayley定理
    [ZJOI2018]树
    [ICPC-Beijing 2006]狼抓兔子
    P4869 albus就是要第一个出场
    浅谈算法——线性基
    [COCI2017-2018#1] Deda
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/9805591.html
Copyright © 2020-2023  润新知