一、構造映射
val scores = Map("Jim"->10, ("Tom",20), "Sam"->44) //key->value, (key,value)兩種方式表示, 不可變映射, val s = scala.collection.mutable.Map("Jim"->10, ("Tom",20), "Sam"->44)//可變映射 val s1 = new scala.collection.mutable.HashMap[String, Int] //空的Map //scores.+=(("Lily"->10)) //不可變映射,map中不能新增元素 s.+=(("Lily"->10)) s1.+=(("Jim"->10)) println(scores) println(s) println(s1)
結果:
Map(Jim -> 10, Tom -> 20, Sam -> 44) Map(Jim -> 10, Tom -> 20, Lily -> 10, Sam -> 44) Map(Jim -> 10)
對偶
"A"->1
("A",1)
二、獲取映射中的值
val scores = Map("Jim"->10, ("Tom",20), "Sam"->44) val score1 = scores("Lily") //直接通過()獲取里面的值 val score2 = if(scores.contains("Lily")) scores("Lily") else 0 //判斷是否存在,然后再取值 val score3 = scores.getOrElse("Lily",0) //通過getOrElse方法實現,不存在給默認值 println(score1)//沒有值,會報異常 println(score2) println(score3)
三、更新映射中的值
可變映射
val scores = scala.collection.mutable.Map("Jim"->10, ("Tom",20), "Sam"->44) scores("Jim") = 11 //更新值 scores("Fred") = 33 //新增值 scores += ("Lily"->30, "Li"-> 27) //增加多個 scores.+=(("Zhao"->44)) scores -= "Jim" //刪除元素 println(scores)
結果
Map(Li -> 27, Zhao -> 44, Fred -> 33, Tom -> 20, Lily -> 30, Sam -> 44)
不可變映射 通過聲明var變量來重新賦值,完成元素的增、刪
var scores = Map("Jim"->10, ("Tom",20), "Sam"->44) scores = scores +("Lily"-> 23) scores -= "Jim" println(scores)
結果
Map(Tom -> 20, Sam -> 44, Lily -> 23)
四、迭代映射
var scores = Map("Jim"->10, ("Tom",20), "Sam"->44) for((k, v) <- scores) println (k+","+v) for(i<- scores.keySet) print(i+" ") println() for(i<- scores.values) print(i+" ")
結果
Jim,10 Tom,20 Sam,44 Jim Tom Sam 10 20 44
五、已排序映射
val sortedScores = scala.collection.immutable.SortedMap("Jim"->10, ("Tom",20), "Sam"->44)
println(sortedScores)
結果
Map(Jim -> 10, Sam -> 44, Tom -> 20)
六、與Java的互操作
七、元組
val tuple = (1, 3.14, "Hello") println(tuple._1) //訪問第一個元組,下標值不是0而是1 val(first, second, _) = tuple //獲取元組的元素 println(second)
結果
1 3.14
八、拉鏈操作
把元組的多個值綁定在一起
val symbols = Array("<","-",">") val counts = Array(2,10,2) val pairs = symbols.zip(counts) for((k,v)<- pairs) print(k * v)
結果
<<---------->>
keys.zip(values).toMap
通過拉鏈組合成映射
1.
val m = Map(("a",10),("b",18),("d",17))
m.mapValues(_*0.9).foreach(println)
2.
val m = new scala.collection.mutable.HashMap[String,Int]() val in = new java.util.Scanner(new java.io.File("file/wordcount.txt")) while(in.hasNext){ val key = in.next() m(key)=if (m.contains(key)) m(key)+1 else 1 }
3.
var word = Map[String,Int]() val in = new java.util.Scanner(new java.io.File("file/wordcount.txt")) while(in.hasNext){ val key = in.next() word = word + ((key, if (word.contains(key)) word(key)+1 else 1)) }
4.
var sortedWords = scala.collection.immutable.SortedMap[String,Int]() val in = new java.util.Scanner(new java.io.File("file/wordcount.txt")) while(in.hasNext){ val key = in.next() sortedWords = sortedWords + ((key, if (sortedWords.contains(key)) sortedWords(key)+1 else 1)) }
5.
import scala.collection.JavaConversions.mapAsScalaMap var words:scala.collection.mutable.Map[String,Int] = new java.util.TreeMap[String,Int]() val in = new java.util.Scanner(new java.io.File("file/wordcount.txt")) while(in.hasNext){ val key = in.next() words(key)=if(words.contains(key)) words(key)+1 else 1 }
6.
val week = new mutable.LinkedHashMap[String,Int]() week("Monday")=java.util.Calendar.MONDAY week("Tuesday")=java.util.Calendar.TUESDAY week("Wednesday")=java.util.Calendar.WEDNESDAY for((k,v)<- week){ println(k,v) }
7.
import scala.collection.JavaConversions.propertiesAsScalaMap val props:scala.collection.Map[String,String]=System.getProperties() val len = props.keys.maxBy(_.length).length() val format = "%-"+len+"s|%s\n" for((k,v) <- props){ printf(s"${format}",k,v) }
8. 匿名函數實現
val minmax = (values:Array[Int])=>{
(values.max,values.min)
}
9.匿名函數實現
val lteqgt = (values:Array[Int], v:Int)=>{ var lt=0 var eq=0 var gt=0 for(i<-values) if (i>v) gt+=1 else if(i==v) eq+=1 else lt+=1 (lt,eq,gt) }
10.
Vector((H,W), (e,o), (l,r), (l,l), (o,d))
參考《快學Scala》