Scala 模式匹配详解

 ▼Scala系列学习笔记:

  1. Scala概述与开发环境配置
  2. Scala基础学习之运算符
  3. Scala基础学习之for循环和while循环
  4. 一文掌握scala中的方法和函数
  5. Scala基础:类和对象、访问修饰符和构造器
  6. Scala的继承和抽象类
  7. Scala基础语法之Trait详解
  8. Scala学习之数组与元组
  9.  大数据Scala学习—列表、 集与映射
  10. 理解Scala的函数式编程思想 

Scala中有一个非常强大的模式匹配机制,应用也非常广泛, 例如:

  • 判断固定值
  • 类型查询
  • 快速获取数据

1 简单模式匹配

一个模式匹配包含了一系列备选项,每个备选项都开始于关键字 case。且每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。

格式

执行流程

1. 先执行第一个case, 看 变量值 和 该case对应的常量值 是否一致.
2. 如果一致, 则执行该case对应的表达式.
3. 如果不一致, 则往后执行下一个case, 看 变量值 和 该case对应的常量值 是否一致.
4. 以此类推, 如果所有的case都不匹配, 则执行 case _ 对应的表达式. 

需求

1. 提示用户录入一个单词并接收.
2. 判断该单词是否能够匹配以下单词,如果能匹配,返回一句话
3. 打印结果

参考代码

 

2 匹配类型

除了匹配数据之外 , match表达式还可以进行类型匹配。如果我们要根据不同的数据类型,来执行不同的逻辑,也 可以使用match表达式来实现。
格式
注意 : 如果 case表达式中无需使用到匹配到的变量,可以使用下划线代代替
需求
1. 定义一个变量为 Any 类型,然后分别给其赋值为 "hadoop" 1 1.0
2. 定义模式匹配,然后分别打印类型的名称
参考代码

3 守卫

所谓的守卫指的是 case 语句中添加 if 条件判断 , 这样可以让我们的代码更简洁 , 更优雅.
格式

需求

1. 从控制台读入一个数字 a (使用 StdIn.readInt
2. 如果 a >= 0 而且 a <= 3 ,打印 [0-3]
3. 如果 a >= 4 而且 a <= 8 ,打印 [4,8]
4. 否则,打印未匹配
参考代码

4 匹配样例类

Scala 中可以使用模式匹配来匹配样例类,从而实现可以快速获取样例类中的成员数据。后续,我们在开发 Akka案例时,还会经常用到。
格式

注意:

1. 样例类型后的小括号中 , 编写的字段个数要和该样例类的字段个数保持一致 .
2. 通过 match 进行模式匹配的时候 , 要匹配的对象必须声明为 : Any类型
需求
1. 创建两个样例类 Customer( 包含姓名 , 年龄字段 ), Order( 包含 id 字段 )
2. 分别定义两个样例类的对象,并指定为 Any 类型
3. 使用模式匹配这两个对象,并分别打印它们的成员变量值
参考代码

5 匹配集合

了上述功能之外 , Scala 中的模式匹配,还能用来匹配数组 , 元组 , 集合 ( 列表 , , 映射 ) 等。
5.1 示例一 : 匹配数组
需求
1. 依次修改代码定义以下三个数组
2. 使用模式匹配 , 匹配上述数组 .
参考代码
5.2 示例二 : 匹配列表
需求
1. 依次修改代码定义以下三个列表

 2. 使用模式匹配, 匹配上述列表.

参考代码

 

5.3 案例三 : 匹配元组
需求
1. 依次修改代码定义以下两个元组
2. 使用模式匹配 , 匹配上述元组 .
参考代码

6 变量声明中的模式匹配

在定义变量时,可以使用模式匹配快速获取数据 . 例如 : 快速从数组 , 列表中获取数据 .
需求
1. 生成包含 0-10 数字的数组,使用模式匹配分别获取第二个、第三个、第四个元素
2. 生成包含 0-10 数字的列表,使用模式匹配分别获取第一个、第二个元素
参考代码

7 匹配for表达式

Scala 中还可以使用模式匹配来匹配 for 表达式,从而实现快速获取指定数据 , 让我们的代码看起来更简洁 , 更优雅 .
需求
1. 定义变量记录学生的姓名和年龄 , 例如 : " 张三 " -> 23, " 李四 " -> 24, " 王五 " -> 23, " 赵六 " -> 26
2. 获取所有年龄为 23 的学生信息 , 并打印结果 .
参考代码

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值