一、映射
1、Scala映射就是鍵值對的集合Map。默認情況下,Scala中使用不可變的映射。 如果想使用可變集合Map,必須導入scala.collection.mutable.Map (導包時scala.collection.mutable._ 為可變;scala.collection.immutable._ 為不可變)
val map =Map("a"->10,"b"->11,"c"->12) 或者 val map =Map(("a",10),("b",11),("c",12))
創建可變map val map =scala.collection.mutable.Map("a"->10,"b"->11,"c"->12)
也可以創建hashmap val map =new scala.collection.mutable.HashMap[String,Int]
映射這種數據結構是一種將鍵映 射到值的函數。 區別在於通常的函數計算值, 而映射只是做查詢。
2、獲取映射中的值
val map1=map("a")
val map1=if(map.contain("a")) map("a") else 0 和下面的意義相同,相當於Java的三元運算符
val map1=map.getOrElse("a",0)
如果映射並不包含請求中使用的鍵, 則會拋出異常。 要檢查映射中是否有某個指定的鍵, 可以用contains方法。 getOrElse方法, 若包含相應的鍵, 就返回這個鍵所對應的值, 否則返加0.
映射.get(鍵)這樣的調用返回一個Option對象, 要么是Some(鍵對應的值), 要么是None。 如果map 中有的話 返回Some,沒有返回None
3、修改map元素
更新可變map集合
更新map元素: map("a")=30
增加多個元素: map+=("d"->10,"e"->11)
移除元素:map-="d"
更新不可變map集合:
添加不可變Map的元素, 產生一個新的集合Map, 原Map不變 val ages2 = ages + ("Mike" -> 36, "Tom" -> 40)
移除不可變Map的元素, 產生一個新的集合Map, 原Map不變 val ages3 = ages - "Tom"
4、修改map的值
score("Bob")=10 前提map score是可變的
5、遍歷map操作
遍歷map的entrySet for ((key, value) <- ages) println(key + " " + value)
遍歷map的key for (key <- ages.keySet) println(key)
遍歷map的value for (value <- ages.values) println(value)
生成新map, 反轉key和value for ((key, value) <- ages) yield (value, key)
map的值是不能重復的,如果反轉后,key值相同的,后面的覆蓋前面的
6、SortedMap和LinkedHashMap (上邊的map不記插入的順序,而且也不按key排序)
SortedMap可以自動對Map的key的排序 val ages = scala.collection.immutable.SortedMap("leo" -> 30, "alice" -> 15, "jen" -> 25)
LinkedHashMap可以記住插入entry的順序
val ages = new scala.collection.mutable.LinkedHashMap[String, Int]
ages("leo") = 30
ages("alice") = 15
7、Java Map與Scala Map的隱式轉換
Java Map 轉換Scala Map
import scala.collection.JavaConversions.mapAsScalaMap; class javaMapToScalaMap { def main(args: Array[String]): Unit = { //創建Java的Map val javaMap=new java.util.HashMap[String,Int]() javaMap.put("a", 1) javaMap.put("b", 2) javaMap.put("c", 3) //將JAVA 的map轉換成Scala的Map val scalaMap: scala.collection.mutable.Map[String, Int] = javaMap for((k,v)<-scalaMap) println(k+" "+v) } }
二、元組(tuple)
1、元組是不同類型的值的聚集 對偶是元組的最簡單形態 元組的索引從1開始,而不是0,切記!
val tuple =(1,2.3,"li",true)
val a=tuple._2 結果為double類型的2.3
Tuple拉鏈操作 :Tuple拉鏈操作指的就是zip操作 zip操作, 是Array類的方法, 用於將兩個Array, 合並為一個Array
比如Array(v1)和Array(v2), 使用zip操作合並后的格式為Array((v1,v2)) 合並后的Array的元素類型為Tuple
例:
val students = Array("Leo", "Jack", "Jen")
val scores = Array(80, 100, 90)
val studentScores = students.zip(scores)
如果取 值 例如 studentScores(1)._1 結果為"Jack"
如果長度不等,直接刪除多余的元素
如果Array的元素類型是個Tuple, 調用Array的toMap方法, 可以將Array轉換為Map studentScores.toMap
三、實例
移除第一個負數之后的所有負數
構建數組
val array = ArrayBuffer[Int]()
array += (1, 2, 3, 4, 5, -1, -3, -5, -9)
var foundFirstNegative = false val keepIndexes = for (i <- 0 until a.length if !foundFirstNegative || array(i) >= 0) yield { if (array(i) < 0) foundFirstNegative = true i }
for (i <- 0 until keepIndexes.length) { array(i) = array(keepIndexes(i)) } array.trimEnd(a.length - keepIndexes.length)
四、補充
1、Scala中的集合有三大類:序列(Seq)、集(Set)、映射(Map)
2、對數組進行排序還有一種方法 scala.util.Sorting.quickSort(array)
3、高階數組