Scala 模式匹配详解

Posted 黑马程序员官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 的学生信息 , 并打印结果 . 参考代码

 

 

以上是关于Scala 模式匹配详解的主要内容,如果未能解决你的问题,请参考以下文章

Scala 模式匹配详解

Scala 模式匹配详解

第26讲: Scala中的模式匹配入门实战详解

13scala模式匹配

Scala 匹配模式

Spark记录-Scala模式匹配