构造映射:
val scores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8) //不可变映射
val scores2 = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8) //可变映射
val socres3 = new mutable.HashMap[String, Int] //空映射
获取映射中的值:
val bobScore = scores("Bob") //类似于Java中的scores.get("Bob"),如果映射不包含请求中使用的键,则会抛出异常
检查是否有某个指定的键:
val bobScore1 = if(scores.contains("Bob")) scores("Bob") else 0 val bobScore2 = scores.getOrElse("Bob", 0) //若映射中包含"Bob",则返回对应的值,否则返回0
更新映射中的值:
scores2("Bob") = 10 scores2("Fred") = 7 scores2 += ("Bob" -> 10, "Fred" -> 7) scores2 -= "Alice" val newScores = scores + ("Bob" -> 10, "Fred" -> 7) //更新过的映射
注:只能更新一个可变映射中的键值对;但是对于不可变映射可以使用最后一种方法
迭代映射:
println(scores.keySet) for(v <- scores.values) println(v) println("") for(k <- scores.keys) println(scores(k)) println("") for(k <- scores.keySet) println(scores(k))
输出结果:
与Java的交互操作:
import scala.collection.JavaConverters._ ... val scores4 : java.util.Map[String, Int] = scores2.asJava
val scores5 : mutable.Map[String, Int] = scores4.asScala
关于JavaConverters api详情见 http://www.scala-lang.org/api/current/scala/collection/JavaConverters$.html
元组(Tuple)
val t = (1, 3.14, "Fred") println(t._1) var (first, second, third) = t (first, second, _) = t
拉练操作:
val symbols = Array("<", "-", ">") val counts = Array(2, 10, 2) val pairs = symbols.zip(counts) for((s,n) <- pairs) print(s * n)
注:代码中的"*"为复写方法,表示将字符串s重复n次
keys.zip(values).toMap
存在一个键的集合,以及一个与之平行对应的值的集合,那么就可以使用拉练操作将他们组合成一个对偶的集合,再用toMap方法将其转换成映射