日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scala模式匹配,case 字符串,case 匹配类型,case 匹配数组,case 匹配List,case 匹配元组,case匹配case class和case object

發布時間:2024/9/27 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala模式匹配,case 字符串,case 匹配类型,case 匹配数组,case 匹配List,case 匹配元组,case匹配case class和case object 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 模式匹配和樣例類

Scala有一個十分強大的模式匹配機制,可以應用到很多場合:如switch語句、類型檢查等。
并且Scala還提供了樣例類,對模式匹配進行了優化,可以快速進行匹配
1. 匹配字符串

package cn.toto.scala.day2import scala.util.Random/*** Created by toto on 2017/6/30.*/ object CaseDemo extends App{var arr = Array("zhangsan","lisi","wangwu")val name = arr(Random.nextInt(arr.length))name match {case "zhangsan" => println("zhangsan....")case "lisi" => println("lisi....")case "wangwu" => println("wangwu....")case _ => println("真不知道你們在說什么....")} }

2. 匹配類型

package cn.toto.scala.day2import scala.util.Random/*** Created by toto on 2017/7/1.* 匹配類型*/ object CaseDemo02 extends App {//val v = if(x >= 5) 1 else if(x < 2) 2.0 else "hello"//可以使用不同的類型,可以使用自己定義的類型val arr = Array("hello",1,2.0,CaseDemo)val v = arr(Random.nextInt(4))println(v)v match {case x:Int => println("Int " + x)case y:Double if(y >= 0) => println("Double " + y)case z:String => println("String " + z)case CaseDemo => {println("case demo")}case _ => {println("default")}} }

運行的結果有以下幾種情況:

cn.toto.scala.day2.CaseDemo$@5f2050f6 case demo2.0 Double 2.0hello String hello1 Int 1

**注意:**case y: Double if(y >= 0) => …
模式匹配的時候還可以添加守衛條件。如不符合守衛條件,將掉入case _中
3. 匹配數組、List、元組

package cn.toto.scala.day2/*** Created by toto on 2017/7/1.* 整個的運行結果是:* 匹配2,3開頭的 5* ===========================* 3* List(-1)* ===========================* 3 List(-1)* 2,3 7*/ object CaseDemo3 extends App{var arr = Array(2,3,5)/*** 可以匹配數組中的一部分的內容*/arr match {case Array(1, x, y) => println(x + " " + y)case Array(2,3,x) => println("匹配2,3開頭的 " + x)case Array(0) => println("only 0")case Array(0, _*) => println("0 ...")case _ => println("something else")}println("===========================")val lst = List(3,-1)println(lst.head)println(lst.tail)println("===========================")//Nil表示空列表lst match {case 0 :: Nil => println("only 0")//運行結果是:3 List(-1)case 3 ::a => println(s"3 $a")//下滿的結果是:x: 3 y: -1//case x :: y :: Nil => println(s"x: $x y: $y") //注意要加個字符串scase 0 :: tail => println("0 ...")case _ => println("something else")}println("===========================")//下面的運行結果是:2,3 7//元組val tup = (2,3,7)tup match {case (1,x,y) => println(s"1,$x,$y")case (2,3,a) => println(s"2,3 $a")case (_,z,5) => println(z)case _=> println("else")} }

注意:在Scala中列表要么為空(Nil表示空列表)要么是一個head元素加上一個tail列表。
9 :: List(5, 2) :: 操作符是將給定的頭和尾創建一個新的列表
注意::: 操作符是右結合的,如9 :: 5 :: 2 :: Nil相當于 9 :: (5 :: (2 :: Nil))
4. 樣例類
在Scala中樣例類是一中特殊的類,可用于模式匹配。case class是多例的,后面要跟構造參數,case object是單例的

package cn.toto.scala.day2import scala.util.Random/*** Created by toto on 2017/7/1.*/ case class SubmitTask(id: String, name: String) case class HeartBeat(time: Long) case object CheckTimeOutTask/*** 下面的結果分為一下幾種情況:* 0001, task-0001** check* * 123333*/ object CaseDemo04 extends App {val arr = Array(CheckTimeOutTask,HeartBeat(123333),SubmitTask("0001","task-0001"))arr(Random.nextInt(arr.length)) match {case SubmitTask(id,name) => {println(s"$id, $name")}case HeartBeat(time) => {println(time)}case CheckTimeOutTask => {println("check")}} }

總結

以上是生活随笔為你收集整理的Scala模式匹配,case 字符串,case 匹配类型,case 匹配数组,case 匹配List,case 匹配元组,case匹配case class和case object的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。