1. 程式人生 > >大資料系列-Scala學習4

大資料系列-Scala學習4

問題:
1、Map(對映)的操作
2、Tuple(元組)的操作
1、對映
對映是鍵/值對偶的

val scores=Map("Alice"->10,"Bob"->3,"Cindy"->8)

上述程式碼構造出一個不可變的Map[String,Int],其值不能被改變,如果你想要一個可變對映可以用

var score=scala.collection.mutable.Map("Alice"->10,"Bob"->3,"Cindy"->8)

如果你只是想定義一個空的對映,你需要選定一個對映實現並給出型別引數

val scoress=new scala.collection.mutable
.HashMap[String,Int]

獲取對映中的值

 val bobsScore=scores("Bob")

如果用上面的方法會存在一個問題,如果請求中沒有這個鍵,那麼就會丟擲異常
所以我們應該這麼寫
val bobs=if (scores.contains(“Bob”)) scores(“Bob”) else 0
println(bobs)
簡介的寫法是
val bob=scores.getOrElse(“Bob”, 0)
println(bob)

更新對映中的值 假設score是一個可變的對映
score(“Bob”)=10 更新原來的值
score(“Fred”)=9 增加一個鍵/值對
score +=(“xlucas”->20,”xulu”->19) 用+=來增加多個關係
score -=”xlucas” 移除某一個鍵

迭代遍歷
for((k,v)<-score) println(v,k)
for(v<-score.values) println(v)

案例

package cn.xlucas.day4
object TupleDemo1 {
  def main(args:Array[String]){
    val scores=Map("Alice"->10,"Bob"->3,"Cindy"->8)
    var score=scala.collection.mutable.Map("Alice"->10,"Bob"->3,"Cindy"->8
) val scoress=new scala.collection.mutable.HashMap[String,Int] println(scores) //獲取到對映中的值 val bobsScore=scores("Bob") println(bobsScore) //如果用上面的方法會存在一個問題,如果請求中沒有這個鍵,那麼就會丟擲異常 //所以我們應該這麼寫 val bobs=if (scores.contains("Bob")) scores("Bob") else 0 println(bobs) //簡介的寫法是 val bob=scores.getOrElse("Bob", 0) println(bob) score("Bob")=10 score("Fred")=9 score +=("xlucas"->20,"xulu"->19) score -="xlucas" println(score) for((k,v)<-score) println(v,k) for(v<-score.values) println(v) } }

結果

Map(Alice -> 10, Bob -> 3, Cindy -> 8)
3
3
3
Map(Bob -> 10, Fred -> 9, Alice -> 10, xulu -> 19, Cindy -> 8)
(10,Bob)
(9,Fred)
(10,Alice)
(19,xulu)
(8,Cindy)
10
9
10
19
8

2、元組
(1)在元組當中可以存放很多個數據,元組中資料的訪問是從下標1開始的.
(2)元組是很重要的,因為對於一個函式或運算元來說,有可能會返回幾個值,我們常用tuple中定義的幾個變數來接受 函式返回的數值。

案例

package cn.xlucas.day4

object TupleDemo2 {
  def main(args:Array[String]){
    val tripe = ("Spark","Hadoop",88.8,20)
       println(tripe._1) //對於元組來說,資料的訪問是從下標1開始的
       println(tripe._2)
       println(tripe._3)
       println(tripe._4)

       var [email protected] = "Spark"  //a是b的別名
       println(a+"\t"+b)
       a = "Hadoop"
       println(a+"\t"+b)

       val (c,d) = (100,"Spark")
       println(c+"\t"+d)

       val Array(e,f) = Array(100,300)
       println(e+"\t"+f)
  }
}

結果

Spark
Hadoop
88.8
20
Spark   Spark
Hadoop  Spark
100 Spark
100 300