您好,登錄后才能下訂單哦!
這篇文章主要介紹“Scala模式匹配的方法”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Scala模式匹配的方法”文章能幫助大家解決問題。
Scala的模式匹配最常用于match語句中。下面是一個簡單的整型值的匹配實例。
val colorNum = 1 val colorStr = colorNum match { case 1 => "red" case 2 => "green" case 3 => "yellow" case _ => "Not Allowed"} println(colorStr)
為了測試上面代碼,可以直接把上面代碼放入到“/usr/local/scala/mycode/test.scala”文件中,然后,在Linux系統的Shell命令提示符狀態下執行下面命令:
scala test.scala
Shell 命令
另外,在模式匹配的case語句中,還可以使用變量。
val colorNum = 4 val colorStr = colorNum match { case 1 => "red" case 2 => "green" case 3 => "yellow" case unexpected => unexpected + " is Not Allowed" } println(colorStr)
按照前面給出的方法,在test.scala文件中測試執行上述代碼后會在屏幕上輸出:
4 is Not Allowed
也就是說,當colorNum=4時,值4會被傳遞給unexpected變量。
Scala可以對表達式的類型進行匹配。
for (elem "Spark","Hadoop",'Hello)){ val str = elem match{ case i: Int => i + " is an int value." case d: Double => d + " is a double value." case "Spark"=> "Spark is found." case s: String => s + " is a string value." case _ => "This is an unexpected value." } println(str) }
在test.scala文件中測試執行上述代碼后會在屏幕上輸出:
9 is an int value. 12.3 is a double value. Spark is found. Hadoop is a string value. This is an unexpected value.
可以在模式匹配中添加一些必要的處理邏輯。
for (elem case _ if (elem %2 == 0) => println(elem + " is even.") case _ => println(elem + " is odd.") } }
上面代碼中if后面條件表達式的圓括號可以不要。執行上述代碼后可以得到以下輸出結果:
1 is odd. 2 is even. 3 is odd. 4 is even.
我們之前在介紹“映射”的時候,實際上就已經接觸過了for表達式中的模式。 還是以我們之前舉過的映射為例子,我們創建的映射如下:
val university = Map("XMU" -> "Xiamen University", "THU" -> "Tsinghua University","PKU"->"Peking University")
循環遍歷映射的基本格式是:
for ((k,v)
對于遍歷過程得到的每個值,都會被綁定到k和v兩個變量上,也就是說,映射中的“鍵”被綁定到變量k上,映射中的“值”被綁定到變量v上。
下面給出此前已經介紹過的實例:
for ((k,v) printf("Code is : %s and name is: %s\n",k,v)
上面代碼執行結果如下:
Code is : XMU and name is: Xiamen University Code is : THU and name is: Tsinghua University Code is : PKU and name is: Peking University
case類是一種特殊的類,它們經過優化以被用于模式匹配。
case class Car(brand: String, price: Int) val myBYDCar = new Car("BYD", 89000) val myBMWCar = new Car("BMW", 1200000) val myBenzCar = new Car("Benz", 1500000)for (car case Car("BYD", 89000) => println("Hello, BYD!") case Car("BMW", 1200000) => println("Hello, BMW!") case Car(brand, price) => println("Brand:"+ brand +", Price:"+price+", do you want it?") } }
把上述代碼放入test.scala文件中,運行“scala test.scala”命令執行后可以得到如下結果:
Hello, BYD! Hello, BMW! Brand: Benz, Price:1500000, do you want it?
標準類庫中的Option類型用case類來表示那種可能存在、也可能不存在的值。 一般而言,對于每種語言來說,都會有一個關鍵字來表示一個對象引用的是“無”,在Java中使用的是null。Scala融合了函數式編程風格,因此,當預計到變量或者函數返回值可能不會引用任何值的時候,建議你使用Option類型。Option類包含一個子類Some,當存在可以被引用的值的時候,就可以使用Some來包含這個值,例如Some(“Hadoop”)。而None則被聲明為一個對象,而不是一個類,表示沒有值。 下面們給出一個實例。
//首先我們創建一個映射scala> val books=Map("hadoop"->5,"spark"->10,"hbase"->7)books: scala.collection.immutable.Map[String,Int] = Map(hadoop -> 5, spark -> 10, hbase -> 7) //下面我們從映射中取出鍵為"hadoop"對應的值,這個鍵是存在的,可以取到值,并且取到的值會被包含在Some中返回scala> books.get("hadoop")res0: Option[Int] = Some(5) //下面我們從映射中取出鍵為"hive"對應的值,這個鍵是不存在的,所以取到的值是None對象scala> books.get("hive")res1: Option[Int] = None
scala
Option類型還提供了getOrElse方法,這個方法在這個Option是Some的實例時返回對應的值,而在是None的實例時返回傳入的參數。例如:
scala> val sales=books.get("hive")sales: Option[Int] = None scala> sales.getOrElse("No Such Book")res3: Any = No Such Book scala> println(sales.getOrElse("No Such Book"))No Such Book
scala
可以看出,當我們采用getOrElse方法時,如果我們取的”hive”沒有對應的值,我們就可以顯示我們指定的“No Such Book”,而不是顯示None。 在Scala中,使用Option的情形是非常頻繁的。在Scala里,經常會用到Option[T]類型,其中的T可以是Sting或Int或其他各種數據類型。Option[T]實際上就是一個容器,我們可以把它看做是一個集合,只不過這個集合中要么只包含一個元素(被包裝在Some中返回),要么就不存在元素(返回None)。既然是一個集合,我們當然可以對它使用map、foreach或者filter等方法。比如:
scala> books.get("hive").foreach(println)
scala
可以發現,上述代碼執行后,屏幕上什么都沒有顯示,因為,foreach遍歷遇到None的時候,什么也不做,自然不會執行println操作。
關于“Scala模式匹配的方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。