映射和元组
构造映射
//不可变的Map[String, Int]
val scores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
//可变Map[String, Int]
val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
//空映射
val scores = new scala.collection.mutable.HashMap[String, Int]
获取映射中的值
val bobScore = scores("Bob") //获取值
val bobScore = if (scores.contains("Bob")) scores("Bob") else 0
等价于:
val bobsScore = scores.getOrElse("Bob", 0)
更新映射中的值
//更新"Bob"对应的值
scores("Bob") = 12
//增加数据
scores("Fred") = 7 //一条
scores += ("Bob" -> 10, "Fred" -> 7) //多条
//删除数据
scores -= "Alice"
迭代映射
for((k, v) <- 映射) //处理k和v
scores.keySet //得到所有Key组成的集合
for ((k, v) <- 映射) yield (v, k) //反转
已排序映射
树形映射:
val scores = scala.collection.immutable.SortedMap("Alice" -> 10, "Fred" -> 7, "Bob" -> 3, "Cindy" -> 8)
与Java的相互操作
import scala.collection.JavaConversions.mapAsScalaMap
val scores: scala.collection.mutable.Map[String, Int] = new Java.util.TreeMap[String, Int] //scala到Java
import scala.collection.JavaConversions.mapAsJavaMap
import java.awt.font.TextAttribute._
val attrs = Map(FAMILY -> "Serif", SIZE -> 12)
val font = new java.awt.Font(attrs)
元组
映射是键/值对偶的集合。
对偶是元组的最简单形态。
元组是不同类型的值的集合。
组成公式:
元组的值是通过将单个的值包含在圆括号中构成。
例子:
val t = (1, 3.14, "Spring")
获取对应的值:
val second = t._2 //或者:
val second = t _2 //即点可以替换为空格
元组的下标是从1开始的,不是从0开始的哦!
拉链操作
val symbols = Array("<", "_", ">")
val counts = Array(2, 10, 2)
val pairs = symbols.zip(counts)
结果:
Array(("<", 2), ("_", 10), (">". 2))
这样做的目的->可以一起被处理:
for((s, n) <- pairs) Console.print(s * n)
结果:
<<__________>>