Scala學習——數組/映射/元組


【《快學Scala》筆記】

數組  /  映射  /  元組

 

一、數組

1、定長數組

聲明數組的兩種形式:

  • 聲明指定長度的數組 val 數組名= new Array[類型](數組長度)

  

  • 提供數組初始值的數組,無需new關鍵字

  

Scala聲明數組時,需要帶有Array類名,且使用 () 來指明長度或提供初始值序列。

在JVM中,Scala的Array以Java數組的方式實現。如arr在JVM中的類型對應java.lang.String[],charArr對應char[]。

2、變長數組

  

ArrayBuffer,全稱scala.collection.mutable.ArrayBuffer,類似於Java中的ArrayList和C++中的vector,是長度可變數組類型的結構,稱為數組緩沖。

通過:val 名 = ArrayBuffer[類型]() 來聲明,聲明ArrayBuffer時需要指明類型。

通過 += 操作符來添加元素或序列,++= 操作符來拼接數組。

【在ArrayBuffer的尾端添加或刪除元素是一個高效的操作。】 ArrayBuffer還支持在指定位置插入、刪除元素。

ArrayBuffer到數組的轉換: toArray方法

  

3、數組遍歷

通過for循環來遍歷數組

  

指定遍歷數組的步長——通過until(上界, 步長)

  

  

通過reverse函數逆序遍歷數組:

  

4、可以通過 for循環+yield 來獲得新的數組或ArrayBuffer

  

  

通過for+yield操作數組或ArrayBuffer之后將得到新的數組或ArrayBuffer。

5、操作數組/數組緩沖常用函數

  

求和、求最大最小值、數組排序。通過sorted函數對數組或ArrayBuffer排序時,返回的是一個新的數組或ArrayBuffer,原有的不變。

可以直接對數組調用排序算法,但是不能對ArrayBuffer排序。

  

quickSort是直接修改原數組,而sorted方法是返回新數組

6、多維數組

Scala中的多維數組同Java中一樣,多維數組都是數組的數組。

  • 通過 Array.ofDim[類型](維度1, 維度2, 維度3,....)來聲明多維數組,如聲明二維數組;

  

  從二維數組的初始化中,我們可以看到,多維數組在Scala中也是數組的數組。

  • 通過 Array[ Array[Int]](維度1) 來聲明數組,可以聲明不規則數組;

  

  多維數組是數組的數組,按照這種性質來聲明多維數組,如例子中的二維數組,聲明時,需要指定最外圍的數組大小。

【注:可以通過scala.collection.JavaConversions包中隱式轉換方法來實現Scala容器類與Java中類的轉換。】

 

二、映射

1、映射構造

對偶,即名值對。可以通過 -> 操作符來定義對偶, 名->值 運算的結果是( 名, 值 ); 

  

也可以聲明對偶形式的變量

  

映射是由對偶構成的,映射是對偶的集合。

  • 聲明不可變映射,直接使用Map來聲明時,默認是不可變映射類型。

  

  【注: 不可變映射維持元素插入順序。】

  • 聲明可變映射(scala.collection.mutable.Map)

  

  【注:放入可變映射中的值並未按照放入順序來排序的。】

  通過for循環來修改可變Map中的值;

  

  【注:映射可變、不可變指的是整個映射是否可變,包括元素值、映射中元素個數、元素次序等。】

  • 聲明空映射

  直接通過 new Map[類型1, 類型2]() 來定義映射會報錯,因為Map是抽象的,無法實例化。

  定義空映射時,需要指定映射的實現類,通過new來定義;

  

  分別定義不可變映射與可變映射。注,直接使用 new HashMap定義時會報錯。

2、映射常用操作

  • 判斷映射中是否含有某個鍵: map.contains(鍵值)

  

  • 使用 += 向可變映射中添加元素或拼接映射

  

  • 使用 -= 移除可變映射中的鍵及對應元素

  

  • 不可變映射可通過 + 操作符返回一個新的不可變映射;不可變映射可通過 - 操作符返回一個新的不可變映射;

  

  • 映射遍歷

  

  • 獲取映射的鍵集合keySet和值集合

  

  通過映射的 keySet 方法可以獲得映射的由鍵值構成的集合;通過 values 方法可以獲得映射的值集合的Interable對象,應用於循環中。

  Scala的keySet / values 方法類似於Java中的映射方法。

3、Scala中映射的底層實現要么基於哈希表,要么基於平衡樹,其中基於平衡樹的映射內部是有序的。

  

  Scala目前基於平衡樹的映射只提供了不可變版本。

  【注:構建可變有序映射可借助Java的TreeMap。】

4、可變映射中,若要構建維持元素插入順序的映射可通過LinkedHashMap。

5、通過scala.collection.JavaConversions.mapAsScalaMap可將Java的Map轉換為Scala類型的Map;通過scala.collection.JavaConversions.mapAsJavaMap可將Scala的映射轉換為Java類型的映射。

6、toMap方法

  使用toMap方法可將對偶組成的集合轉化為映射。

  

 

三、元組

1、元組是不同類型的值的聚集;對偶是最簡單的元組。

2、元組表示

  通過將不同的值用小括號括起來,即表示元組。

  

  上例中元組的類型就是 (Int, Double, Char, String) ;元組中可以存放不同類型的值。

3、元組訪問

  • 元組中的元素稱為組元。可以通過 _1、 _2 、_3 的形式來訪問對應下標的組元。

  

  【注:元組中組元下標從1開始。】

  • 通過模式匹配來訪問元組中的值

  

  忽略不需要的值。在模式匹配時,通過 _ (萬能匹配符)來為不需要獲取值的組元占位,每個 _ 僅可以為一個組元占位。

  

4、元組可用於函數返回多個值的情形

  

  上例中,函數定義返回值類型為元組 (Int, String);

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM