scala(二)

1、映射java

     一、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]ui

         映射這種數據結構是一種將鍵映 射到值的函數。   區別在於一般的函數計算值, 而映射只是作查詢。
    二、獲取映射中的值
spa

        val  map1=map("a")scala

        val  map1=if(map.contain("a")) map("a") else 0        和下面的意義相同,至關於Java的三元運算符對象

        val  map1=map.getOrElse("a",0)blog

         若是映射並不包含請求中使用的鍵, 則會拋出異常。     要檢查映射中是否有某個指定的鍵, 能夠用contains方法。   getOrElse方法, 若包含相應的鍵, 就返回這個鍵所對應的值, 不然返加0.
映射.get()這樣的調用返回一個Option對象, 要麼是Some(鍵對應的值), 要麼是None。  若是map 中有的話 返回Some,沒有返回None
排序

   三、修改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" 
         

   四、修改map的值

        score("Bob")=10    前提map score是可變的

   五、遍歷map操做

         遍歷mapentrySet      for ((key, value) <- ages) println(key + " " + value)
         遍歷mapkey              for (key <- ages.keySet) println(key)

         遍歷mapvalue             for (value <- ages.values) println(value)
         生成新map, 反轉keyvalue            for ((key, value) <- ages) yield (value, key)
         map的值是不能重複的,若是反轉後,key值相同的,後面的覆蓋前面的

   六、SortedMap和LinkedHashMap (上邊的map不記插入的順序,並且也不按key排序)

        SortedMap能夠自動對Mapkey的排序    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

    七、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)
  }
}

2、元組(tuple)

    一、元組是不一樣類型的值的彙集    對偶是元組的最簡單形態      元組的索引從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, 調用ArraytoMap方法, 能夠將Array轉換爲Map   studentScores.toMap 

       

3、實例

        移除第一個負數以後的全部負數

         構建數組  

          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)

4、補充

     一、Scala中的集合有三大類:序列(Seq)、集(Set)、映射(Map)

     二、對數組進行排序還有一種方法      scala.util.Sorting.quickSort(array)

     三、高階數組

相關文章
相關標籤/搜索