Scala中的Map、Tuple、Zip

541732025發表於2015-11-08
Map:k,v鍵值對,跟java裡的Map差不多的意思。
定義一個Map有以下幾種方式:
val map = Map("book"->10,"gun"->18,"ipad"->1000)  
val scores = scala.collection.mutable.Map("Scala" -> 7, "Hadoop" -> 8, "Spark" -> 10 )//可變的Map
val sortedScore = scala.collection.immutable.SortedMap("Scala" -> 7, "Hadoop" -> 8, "Spark" -> 10 )//按照key排序

Map增加、刪除鍵值對:
scores += ("R" -> 9)//新增元素
scores -= "Hadoop"//刪除元素

Map的取值:
val hadoopScore = scores.getOrElse("Hadoop", 0)

Map的遍歷:
for((k,v) <- map) yield (k,v * 0.9)

如果只想取key,可以使用如下方式:
for((k,_) <- map){ //placeholder
     println("Key is " + k)
}

Tuple:scala裡比較特殊的一種資料結構,它允許不同型別的資料放在一起,形成一個元組。
譬如,有些方法一次返回好幾個型別不同的value。再如,Map的一個(k, v)也就是一個Tuple
Tuple的定義:
val tuple =(1,2,3.14,"Rocky","Spark","Flink")

Tuple的取值:
val third = tuple._1//和陣列不同的是,下標從1開始。還能tuple _3這種方式訪問,不過不建議

Tuple其它操作: 
val (first,second,thirda,fourth,fifth,sixth) = tuple//將tuple賦值給另一個tuple
val (f, s, _, _, _,_) = tuple//對於不想要的值,可以使用佔位符  
"Rocky Spark".partition(_.isUpper)//partition返回一個tuple:(String, String) = (RS,ocky park)

Zip:講兩個Array的資料合併起來,形成一個大Array,新的Array元素是一個個的Tuple
val symbols = Array("[", "-", "]")
val counts = Array(2,5,2)
val pairs = symbols.zip(counts)
結果:Array[(String, Int)] = Array(([,2), (-,5), (],2))

for ((x,y) <- pairs) print(x*y)
結果:[[-----]]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1825692/,如需轉載,請註明出處,否則將追究法律責任。

相關文章