Scala 模式匹配详解
Posted 黑马程序员官方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala 模式匹配详解相关的知识,希望对你有一定的参考价值。
▼Scala系列学习笔记:
- Scala概述与开发环境配置
- Scala基础学习之运算符
- Scala基础学习之for循环和while循环
- 一文掌握scala中的方法和函数
- Scala基础:类和对象、访问修饰符和构造器
- Scala的继承和抽象类
- Scala基础语法之Trait详解
- Scala学习之数组与元组
- 大数据Scala学习—列表、 集与映射
- 理解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 的学生信息 , 并打印结果 . 参考代码
以上是关于Scala 模式匹配详解的主要内容,如果未能解决你的问题,请参考以下文章