目錄
本文《快學Scala》的筆記
tuple學習筆記
tuple的定義
對偶是元組(tuple)的最簡單形態——元組是不同類型的值的聚集。
元組的值是通過將單個值包含在圓括號中構成。Example:(1,1.3415,“Fred”)
tuple的訪問
可以通過_1,_2,_3訪問元組的元素
val first = tuple._1 //元組的位置從1開始,而非從0開始
拉鏈操作:zip
通過操作元組,可以把多個值綁在一起,以便它們能夠被一起處理,可以通過zip方法完成。
val symbols = Array("<",">")
val counts = Array("1","2")
val paris = symbols.zip(counts)
val map = pairs.toMap
```
##array學習筆記
###數組要點
- 若長度固定則使用Array,若長度可能有變化則使用ArrayBuffer
- 提供初始值時不要使用new
- 用()來訪問元素
- 用for(elem <- arr) 來遍歷元素
- 用for(elem <- array if ...) ... yield 來將原數組轉型為新數組
- Scala數組和Java數組可以互操作,用ArrayBuffer,使用scala.collection.JavaConversions中的轉換函數。
###定長數組
如果數組長度不變,則可使用scala中的Array,例如:
```scala
val nums = new Array[Int](10) //10個整數的數組,所有元素初始化為0
val string = new Array[String](10) //10個元素的字符串數組,所有元素被初始化為null
val s = Array("hello","scala") //長度為2的Array[String]——類型是推斷出來的。已提供初始值,不需要new
變長數組
對於那種長度按需要變化的數組,Java有ArrayList,C++有vector。Scalable中有等效的數據結構為:ArrayBuffer
import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[Int]()
//或者new ArrayBuffer[Int]
//一個空的數組緩沖,准備存放整數
b += 1 //ArrayBuffer(1),用+=在尾部添加元素
b += (1,2,3,4) //在尾部添加多個元素
b ++= Array(8,12,13) //可以用++=操作符追加任何集合
b.trimEnd(5) //移除最后5個元素
//在任意 位置添加元素
b.insert(2,6) //在下標2之前插入
b.insert(2,6,7,8) //在下標2之前插入6,7,8
b.remove(2) //移除下標為2的位置開始移除元素
b.remove(2,3) //從下標為2開始移除3個元素;第二個參數是表示移除元素的個數
在使用時,有時不確定數組需要裝元素的個數。此時,可以先構建一個數組緩沖,然后調用
b.toArray //將緩沖數組轉換為定長數組
定長數組也可以轉換為緩沖數組
a.toBuffer
遍歷數組和數組緩沖
使用for循環遍歷數組和數組緩沖
- 使用下標的方式
for (i <- 0 until a.length){
println( i + ":" + a(i))
}
until用法擴展:
- 這只步長
scala 0 until (a.length,2)
- 從數組尾部開始
scala (0 until a.length).reverse
- 不使用下標訪問數組元素
for (elem <- arrName) {println(elem)}
數組轉換
val a = Array(2,3,4)
val result = for (elem <- a) yield 2 * elem
for (elem <- a if elem %2==0) yield 2 * elem
常用算法
- sum: Array(1,2,3).sum
- max/min : Array(1,2,3).max/min
- sorted : Array(1,2,3).sorted(_ < ) ; Array(1,2,3).sorted( > _) //不能對緩沖數組排序
- quickSort方法排序:scala.util.Sorting.quickSort(a)
- 顯示數組內容:mkString; a.mkString(" and ") //可以設置分隔符
多維數組
val matrix = Array.ofDimDouble
Map學習筆記
構造映射
val scores = Map("alice" -> 10,"Bob" -> 12)
val scores = Map(("alice",10),("Bob",2))
獲取映射中的值
val bob = scores("Bob")
//驗證是否包含某個指定的鍵
val bobscore = if (scores.contains("Bob")) scores("Bob") else 0
快捷方式:val bobscores = scores.getOrElse("Bob",0)
- 為映射添加多個關系:scores += ("bob" -> 2,"t" -> 3)
迭代映射
通過循環即可遍歷映射中所有的鍵/值對偶
for ((k,v) <- ma) 處理k,v
只訪問key和value
- keySet :scores.keySet
- values:scores.values ;for (v <- scores.values) println(v)
排序
val scores = scala.collections.immutable.SortedMap(scores)
