Scala模式匹配演示
1.什么是模式匹配?
举个例子
我们有一批人员信息,如下所示
姓名 年龄 城市 性别
张三 28 北京 男
李四 29 北京 男
小花 18 上海 女
小鱼 19 河北 女
小牛 21 山东 男
.....
那我们只要北京的人员信息
(name,age,北京,sex)
根据这个模式匹配数据。
2.基础语法
一般模式匹配,使用match关键字,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断。
代码示例:
object Scala_Match {
def main(args: Array[String]): Unit = {
// 模式匹配基础语法
val name:String = "张三"
val res = name match {
case "李四" => "员工"
case "张三" => "经理"
}
println(res) // 输出 经理
}
}
3.匹配示例
3.1 匹配常量值
object Scala_Match {
def main(args: Array[String]): Unit = {
def fun(x:Any) = x match {
case 0 => "归零"
case "新增" => "+"
case "支出" => "-"
}
println(fun(0))
}
}
3.2 匹配数据类型
object Scala_Match {
def main(args: Array[String]): Unit = {
def fun(x:Any) = x match {
case str:String => "String"
case int:Int => "Int"
case _ => "other type"
}
println(fun(List(1, 2, 3)))
}
}
3.3 匹配数组
object Scala_Match {
def main(args: Array[String]): Unit = {
val array = Array(Array(0), Array(0, 1), Array(0, 1, 2), Array(88, 123))
for(arr <- array){
val res = arr match {
case Array(0) => "0" // 匹配Array(0)
case Array(i, j) => "匹配两个元素的数组:"+i + "-" + j
case Array(0, _*) => "第一元素为零的数组"
case _ => "其他数组"
}
println(res)
}
}
}
匹配列表、元组与匹配数组相似
3.4 匹配对象
第一种方式,较少使用
object Scala_Match {
def main(args: Array[String]): Unit = {
// 第一种方式,一般很少用,因为需要手动去声明unapply方法,不方便
val person = Person("张三",18)
val person_name = person match {
case Person("张三", _) => "张三"
}
println(person_name)
}
class Person(val name:String,val age:Int)
object Person{
def apply(name: String, age: Int): Person = new Person(name, age)
// Scala模式匹配会调用对象的unapply方法
def unapply(person: Person): Option[(String, Int)] = {
Option(person.name,person.age)
}
}
}
第二种方式,使用case声明的样例类
object Scala_Match {
def main(args: Array[String]): Unit = {
// 第二种方式
val person = Person("张三",18)
val person_name = person match {
case Person("张三", _) => "张三"
}
println(person_name)
}
// 使用case声明样例类,会自动构建unapply方法
case class Person(name:String, age:Int)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。