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)
结果:[[-----]]