当前位置: 首页 > article >正文

模式匹配类型

一、匹配常量

在scala中,模式匹配可以匹配所有的字面量,包括字符串,字符,数字,布尔值等等

 def describeConst(x:Any):String = x match {
      case "str" => "匹配字符串"
      case '+' => "匹配字符"
      case 1 => "匹配整数"
      case true => "匹配布尔值"
      case a => s"匹配$a"
    }

    println(describeConst("str"))
    println(describeConst('+'))
    println(describeConst(1))
    println(describeConst(true))
    println(describeConst('-'))

在这里插入图片描述

二、匹配类型

   def describeType(x:Any):String = x match {
      case x:String => "匹配字符串"
      case x:Char => "匹配字符"
      case x:Int => "匹配整数"
      case x:Boolean => "匹配布尔值"
      case list:List[String] => "List" + list
      case array:Array[Int] => "Array" + array.mkString("\t")
      case a => s"匹配$a"
    }

    println(describeType("str"))
    println(describeType('+'))
    println(describeType(1))
    println(describeType(true))
    println(describeType(List("a","b","c")))
    // 泛型擦除
    println(describeType(List(1,2,3,4,5)))
    println(describeType(Array(1,2,3,4,5)))
    // array不存在泛型擦除
    println(describeType(Array("1","2")))

在这里插入图片描述

三、匹配集合类型

代码:


   for (arr <- List(
      Array(0),
      Array(1,0),
      Array(0,1,0),
      Array(1,1,0),
      Array(2,3,7,15),
      Array("hello","a",30)
    )){
      val result = arr match{
        case Array(0) => "0"
        case Array(1,0) => "Array(1,0)"
        case Array(x,y) => "Array: " + x + ", " + y
        case Array(0,_*) => "以0开头的数组"
        case Array(x,1,z) => "中间为1的三元素数组"
        case _ => "Something else"
      }
      println(result)
    }

结果:

在这里插入图片描述

  for(list <- List(
      List(0),
      List(1,0),
      List(0,0,0),
      List(1,1,0),
      List(88),
      List("hello")
    )){
      val result = list match {
        case List(0) => "0"
        case List(x,y) => "List(x,y): " + x + ", " + y
        case List(0,_*) => "List(0,..."
        case List(a) => "List(a):" + a
        case _ => "something else"
      }
      println(result)
    }

结果:

在这里插入图片描述

代码:

  val list1 = List(1,2,5,7,24)
    val list = List(24)

    list match {
      case first :: second :: rest => println(s"first:$first, second:$second , rest: $rest")
      case _ => println("something else")
    }


    list1 match {
      case first :: second :: rest => println(s"first:$first, second:$second , rest: $rest")
      case _ => println("something else")
    }

结果:

在这里插入图片描述

  for (tuple <- List(
      (0,1),
      (0,0),
      (0,1,0),
      (0,1,1),
      (1,23,56),
      ("hello",true,0.5)
    )){
      val result = tuple match {
        case (a,b) => ""  + a + ", " + b
        case (0,_) => "(0, _)"
        case (a,1,_) => "(a,1,_) " +a
        case _ => "something else"
      }
      println(result)
    }

结果:

在这里插入图片描述

在变量声明时匹配:

    val (x,y) = (10,"hello")
    println(s"x:$x,y:$y")

    val List(first,second,_*) = List(23,15,9,78)
    println(s"first:$first,second:$second")

    val fir :: sec :: rest = List(23,15,9,78)
    println(s"first:$fir,second:$sec,rest:$rest")

在这里插入图片描述

for推导式中进行模式匹配

将List的元素直接定义为元组,对变量赋值

  val list = List(("a",12),("b",35),("c",27))

    for ((word,count) <- list){
      println(word + " " + count)
    }

在这里插入图片描述

可以不考虑某个位置的变量,只遍历key或者value

    val list = List(("a",12),("b",35),("c",27))

    for ((word,_) <- list)
      println(word)

在这里插入图片描述

可以指定某个位置的值必须是多少

  val list = List(("a",12),("b",35),("c",27),("a",99))
    
    for(("a",count) <- list){
      println(count)
    }

在这里插入图片描述

四、匹配对象及样例类


package scala
object User {
  def main(args: Array[String]): Unit = {

    val student = Student("alice",19)

    val result = student match {
      case Student("alice",19) => "Alice, 19"
      case _ => "Else"
    }

    println(result)

  }

case class Student(name:String,age:Int)

}

在这里插入图片描述


http://www.kler.cn/a/375994.html

相关文章:

  • 基于CNN-BiLSTM的时间序列数据预测,15个输入1个输出,可以更改数据集,MATLAB代码
  • 【每日C/C++问题】
  • linux alsa-lib snd_pcm_open函数源码分析(三)
  • 汽车车辆控制单元SRAM存储解决方案
  • 单链表的基本操作实现
  • 创意设计的起点:十大网页设计模板网站
  • 使用AWS Redshift从AWS MSK中读取数据
  • Dropout 技术:防止神经网络过拟合的有效手段
  • 20241029软考架构-------软考案例9答案
  • AI 大模型的发展趋势是怎样的?
  • 量子神经网络(Quantum Neural Network):结合量子计算的 AI 新探索
  • cv.dnn.blobFromImage参数详解
  • Unity项目使用的.net版本
  • 【网络】HTTP(超文本传输协议)详解
  • Java面试题十五
  • 基于大数据的智能家居销量数据分析
  • 基于OSS搭建在线教育视频课程分享网站
  • 提升效率:中小企业常用的8款任务管理工具
  • 官方源码,LVDS中判断数据是否对齐时钟上升沿的方法解析
  • kkfileview4.2.1 LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz
  • 【25届秋招】蚂蚁集团 0825算法岗笔试
  • Nginx开发实战——网络通信(一)
  • 免费开放商用!Stability AI推轻量级AI绘画利器 Stable Diffusion 3.5 Medium模型
  • 在线体验Sketch中文版,免费下载即刻上手!
  • ubuntu怎么查看端口占用进程
  • Vue3访问页面时自动获取数据