少年壮志不言愁
劝君惜取少年时
-
映射是键/值对的集合,Scala用元组表示n个对象的聚集,这些对象并不一定必须是相同的类型
-
映射构造及获取值:Scala中映射是对偶(对偶就是两个值构成的组)的集合,
->
操作符用来创建对偶scala> val s = Map("a" -> 2, "b" -> 3) // 构造不可变映射 s: scala.collection.immutable.Map[String,Int] = Map(a -> 2, b -> 3) scala> val ims = scala.collection.mutable.Map("ia" -> 2, "ib" -> 3) // 构造可变映射 ims: scala.collection.mutable.Map[String,Int] = Map(ia -> 2, ib -> 3) scala> val sa = s("a") // ()表示法查找键对应的值 sa: Int = 2 scala> s.contains("a") // contains方法检查映射中是否含有某个指定的键 res61: Boolean = true scala> s.get("b") // get方法返回Option对象, 有键就是Some,没有就是None res63: Option[Int] = Some(3) scala> s.get("c") res64: Option[Int] = None scala> s.getOrElse("c", 0) //快捷写法,没有键就返回指定默认值 res66: Int = 0
-
更新映射的值: 更新映射主要分为更新可变映射和不可变映射
- 更新可变映射
- 在
=
左侧使用()
scala> ims("ia") = 5 // 更新键"a"对应的值 scala> ims("ic") = 7 // 增加新的键值对 scala> ims res74: scala.collection.mutable.Map[String,Int] = Map(ia -> 5, ic -> 7, ib -> 3) scala> ims += ("id" -> 8, "ie" ->10 ) // +=添加多个关系 res75: ims.type = Map(ia -> 5, ic -> 7, ib -> 3, ie -> 10, id -> 8) scala> ims -= ("ia") // -=移除某个键值对 res76: ims.type = Map(ic -> 7, ib -> 3, ie -> 10, id -> 8)
- 在
- 更新不可变映射,构造一个包含不可变映射的新映射
scala> s res77: scala.collection.immutable.Map[String,Int] = Map(a -> 2, b -> 3) scala> val new_s = s + ("c" -> 5, "d" -> 6) new_s: scala.collection.immutable.Map[String,Int] = Map(a -> 2, b -> 3, c -> 5, d -> 6)
- 更新可变映射
-
迭代映射:使用
for
循环的模式匹配,for ((k, v) <- 映射) 处理 k v
,映射使用keySet
和values
方法访问键和值
Scala交换键值位置实现反转一个映射for ((k, v) <- 映射) yield (v, k)
-
Scala通过哈希表和平衡树实现映射,默认情况下是基于哈希表(更加高效),哈希表使用键的哈希码来划定位置,因此遍历以一种不可预期的顺序交出元素。
如果需要按照顺序依次访问映射中的键,可以使用SortedMap
如果要按插入顺序访问所有键,使用LinkedHashMap
-
元组是不同类型值得聚集,元组的值是通过将单个的值包括在圆括号中构成的,例如
(1, 3,14, "xhades")
是一个Tuple3[Int, Double, java.lang.String]
类型的元组访问元组主要通过
_1
、_2
、_3
方法(也可以把t._1
写成t _1
),注意元组的各组成部件从1开始,而不是从0如果并不是所有的部件都需要,那么可以在不需要的位置使用
_
-
Scala使用拉链操作(
zip
方法)实现元组组成的集合scala> val a = Array("scala","python", "java") a: Array[String] = Array(scala, python, java) scala> val b = Array(1, 2, 3) b: Array[Int] = Array(1, 2, 3) scala> a.zip(b) res67: Array[(String, Int)] = Array((scala,1), (python,2), (java,3))
这样这些对偶就可以被一起处理了
用
toMap
方法可以将对偶的集合转换成映射a.zip(b).toMap
scala> a.zip(b).toMap res68: scala.collection.immutable.Map[String,Int] = Map(scala -> 1, python -> 2, java -> 3)
网友评论