映射和元组
1.构造映射
- 构造不可变的Map[String,Int],其值不能被改变。
val scores = Map("Alice" -> 10, "Bob" -> 10, "Cindy" -> 8)
- 构造可变映射
val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
- -> 操作符来创建对偶
"Alice" -> 10
- 也可以用下面的方式来定义映射
val scores = Map(("Alice", 10),("Bob", 3),("Cindy", 8))
2.获取映射中的值
- 在Scala中,函数和映射之间的相似性尤为明显,将使用()表示法来查找某个键对应的值。
val bobsScore = scores("Bob")
Tips:如果映射不包含请求中使用的键,则会抛出异常。
- 要检查映射中是否有某个指定的键,可以用contains方法:
val bobsScore = if (score.contain("Bob")) scores("Bob") else 0
Tips:由于这样的组合调用十分普遍,以下是一个快捷写法:
val bobsScore = scores.getOrElse("Bob", 0)
Tips_2:映射.get(键)这样的调用返回一个Option对象,要么是Some(键对应的值),要么是None。
3.更新映射中的值
- 在可变映射中,可以更新某个映射的值,或者添加一个新的映射关系,做法是在 = 号的左侧使用():
scores("Bob") = 10 //更新键"Bob"对应的值(假定scores是可变的)
- 也可以用 += 操作添加多个关系
scores += ("Bob" -> 10, "Fred" -> 7)
4.迭代映射
- 遍历映射中所有的键/值对偶
for ((k,v ) -> 映射) //处理k和v
这里的“魔法”是你可以在Scala的for循环中使用模式匹配。
5.元组:是不同类型的值的聚集
- 元组的值是通过将单个的值包含在圆括号中构成的。
(1, 3.14, "Fred") //该元组的类型为:Tuple3[Int, Double, java.lang.String]
- 使用方法_1、_2、_3访问元组的元素,比如:
val second = t._2 //将second设为3.14
Tips:和数组或字符串中的位置不同,元组的个元组从1开始,而不是0.
- 通常,使用匹配模式来获取元组的组元
val (first, second, third) = t //将first设为1,second设为3.14,third设为"Fred"
- 如果不是所有的部件都需要,可以在不需要部件的位置上使用_:
val (first, second, _) = t
6.拉链操作
- 使用元组的原因是把多个值绑在一起,以便它们能够被一起处理,通常可以用zip方法来完成。
val symbols = Array("<", "-", ">")
val counts = Array(2, 10, 2)
val pairs = symbols.zip(counts)
输出对偶的数组:
Array(("<", 2), ("-", 10), (">", 2)) //然后这些对偶就可以一起处理
Tips:可以用toMap方法将对偶的集合转换成映射。
keys.zip(valuse).toMap