日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Scala編程實例:使用List和Tuple

本節(jié)接著上一節(jié)的內(nèi)容,繼續(xù)介紹Scala編程中一些更特征:List(數(shù)組)和Tuple(元組)。

錫林郭勒盟網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

編輯推薦:Scala編程語言專題

Scala中使用List

方法不應(yīng)該有副作用是函數(shù)風(fēng)格編程的一個很重要的理念。方法唯一的效果應(yīng)該是計算并返回值。用這種方式工作的好處就是方法之間很少糾纏在一起,因此就更加可靠和可重用。另一個好處(靜態(tài)類型語言里)是傳入傳出方法的所有東西都被類型檢查器檢查,因此邏輯錯誤會更有可能把自己表現(xiàn)為類型錯誤。把這個函數(shù)式編程的哲學(xué)應(yīng)用到對象世界里意味著使對象不可變。

如你所見,Scala數(shù)組是一個所有對象都共享相同類型的可變序列。比方說Array[String]僅包含String。盡管實例化之后你無法改變Array的長度,它的元素值卻是可變的。因此,Array是可變的對象。

說到共享相同類型的不可變對象序列,Scala的List類才是。和數(shù)組一樣,List[String]包含的僅僅是String。Scala的List,scala.List,不同于Java的java.util.List,總是不可變的(而Java的List可變)。更通常的說法,Scala的List是設(shè)計給函數(shù)式風(fēng)格的編程用的。

創(chuàng)建一個List很簡單。代碼3.3做了展示:

 
 
 
 
  1. val oneTwoThree = List(1, 2, 3)

代碼 3.3 創(chuàng)造和初始化列表

代碼3.3中的代碼完成了一個新的叫做oneTwoThree的val,并已經(jīng)用帶有整數(shù)元素值1,2和3的新List[Int]初始化。 因為List是不可變的,他們表現(xiàn)得有些像Java的String:當(dāng)你在一個List上調(diào)用方法時,似乎這個名字指代的List看上去被改變了,而實際上它只是用新的值創(chuàng)建了一個List并返回。比方說,List有個叫“:::”的方法實現(xiàn)疊加功能。你可以這么用:

 
 
 
 
  1. val oneTwo = List(1, 2)
  2. val threeFour = List(3, 4)
  3. val oneTwooneTwoThreeFour = oneTwo ::: threeFour
  4. println(oneTwo + " and " + threeFour + " were not mutated.")
  5. println("Thus, " + oneTwoThreeFour + " is a new List.")

如果你執(zhí)行這個腳本,你會看到:

 
 
 
 
  1. List(1, 2) and List(3, 4) were not mutated.
  2. Thus, List(1, 2, 3, 4) is a new List.

或許List最常用的操作符是發(fā)音為“cons”的‘::’。Cons把一個新元素組合到已有List的最前端,然后返回結(jié)果List。例如,若執(zhí)行這個腳本:

 
 
 
 
  1. val twoThree = list(2, 3)
  2. val oneTwoThree = 1 :: twoThree
  3. println(oneTwoThree)

你會看到:

 
 
 
 
  1. List(1, 2, 3)

注意

表達式“1 :: twoThree”中,::是它右操作數(shù),列表twoThree,的方法。你或許會疑惑::方法的關(guān)聯(lián)性上有什么東西搞錯了,不過這只是一個簡單的需記住的規(guī)則:如果一個方法被用作操作符標(biāo)注,如a * b,那么方法被左操作數(shù)調(diào)用,就像a.*(b)——除非方法名以冒號結(jié)尾。這種情況下,方法被右操作數(shù)調(diào)用。因此,1 :: twoThree里,::方法被twoThree調(diào)用,傳入1,像這樣:twoThree.::(1)。

5.8節(jié)中將描述更多操作符關(guān)聯(lián)性的細(xì)節(jié)。

由于定義空類的捷徑是Nil,所以一種初始化新List的方法是把所有元素用cons操作符串起來,Nil作為最后一個元素。

比方說,下面的腳本將產(chǎn)生與之前那個同樣的輸出

 
 
 
 
  1. “List(1, 2, 3)”: 
  2. val oneTwoThree = 1 :: 2 :: 3 :: Nil
  3. println(oneTwoThree)

Scala的List包裝了很多有用的方法,表格3.1羅列了其中的一些。列表的全部實力將在第十六章釋放。

為什么列表不支持append?

類List沒有提供append操作,因為隨著列表變長append的耗時將呈線性增長,而使用::做前綴則僅花費常量時間。如果你想通過添加元素來構(gòu)造列表,你的選擇是把它們前綴進去,當(dāng)你完成之后再調(diào)用reverse;或使用ListBuffer,一種提供append操作的可變列表,當(dāng)你完成之后調(diào)用toList。ListBuffer將在22.2節(jié)中描述。

Scala中使用Tuple

另一種有用的容器對象是元組:tuple。與列表一樣,元組也是不可變的,但與列表不同,元組可以包含不同類型的元素。而列表應(yīng)該是List[Int]或List[String]的樣子,元組可以同時擁有Int和String。元組很有用,比方說,如果你需要在方法里返回多個對象。Java里你將經(jīng)常創(chuàng)建一個JavaBean樣子的類去裝多個返回值,Scala里你可以簡單地返回一個元組。而且這么做的確簡單:實例化一個裝有一些對象的新元組,只要把這些對象放在括號里,并用逗號分隔即可。一旦你已經(jīng)實例化了一個元組,你可以用點號,下劃線和一個基于1的元素索引訪問它。代碼3.4展示了一個例子:

 
 
 
 
  1. val pair = (99, "Luftballons")
  2. println(pair._1)
  3. println(pair._2)

代碼 3.4 創(chuàng)造和使用元組

代碼3.4的第一行,你創(chuàng)建了元組,它的第一個元素是以99為值的Int,第二個是"luftballons"為值的String。Scala推斷元組類型為Tuple2[Int, String],并把它賦給變量pair。第二行,你訪問_1字段,從而輸出第一個元素,99。第二行的這個“.”與你用來訪問字段或調(diào)用方法的點沒有區(qū)別。本例中你正用來訪問名叫_1的字段。如果執(zhí)行這個腳本,你能看到:

 
 
 
 
  1. 99
  2. Luftballons

元組的實際類型取決于它含有的元素數(shù)量和這些元素的類型。因此,(99, "Luftballons")的類型是Tuple2[Int, String]。('u', 'r', 'the', 1, 4, "me")是Tuple6[Char, Char, String, Int, Int, String]。

訪問元組的元素

你或許想知道為什么你不能像訪問List里的元素那樣訪問元組的,就像pair(0)。那是因為List的apply方法始終返回同樣的類型,但是元組里的或許類型不同。_1可以有一個結(jié)果類型,_2是另外一個,諸如此類。這些_N數(shù)字是基于1的,而不是基于0的,因為對于擁有靜態(tài)類型元組的其他語言,如Haskell和ML,從1開始是傳統(tǒng)的設(shè)定。

本文節(jié)選自《Programming in Scala》

【相關(guān)閱讀】

  1. Scala編程實例:帶類型的參數(shù)化數(shù)組
  2. 初探Scala編程:編寫腳本,循環(huán)與枚舉
  3. 初探Scala編程:解釋器,變量及函數(shù)定義
  4. 影響Scala語言設(shè)計的因素列表
  5. 喜歡Scala編程的四個理由

分享名稱:Scala編程實例:使用List和Tuple
標(biāo)題來源:http://www.dlmjj.cn/article/djedoce.html