首页 > 代码库 > Scala学习 —— 元组&映射

Scala学习 —— 元组&映射

再说集合之前,我们先来回顾一下映射&元祖

映射是键/值对偶的集合,Scala有一个通用的叫法——元组,也就是n个对象的聚集,并不一定要相同类型的。对偶不过是一个n=2的元祖。元祖对于那种需要将两个或更多值聚集在一起特别有用。

1、创造映射

-> 操作符用来创建对偶,相对于圆括号("key", value)更易读

1 // 不可变映射
2 val map = Map("test1" -> 10, "test2" -> 20 )
3 // 可变映射
4 val map =  scala.collection.mutable.Map("test1" -> 10, "test2" -> 20)

 

2、获取映射中的值

1 // 类似Java中的map.get()
2 val test1 = map.get("test1")
3 // 类似Java中contains方法,如果包含返回对应值,否则返回0
4 val test1 = map.getOrElse("test1", 0)

 

3、更新映射中的值

前提是在可变映射中

 1 // 更新键值对偶
 2 map(“test2”) = 22
 3 // 增加键值对偶
 4 map("test3") = 30
 5 //  增加多个关系
 6 map += ("test4" -> 40, "test5" -> 50)
 7 // 移除某个键对应的值
 8 map -= “test5”
 9 //移除 某个键
10 map = map - “test5”

在不可变映射中

 val newMap = map + ("new1" -> 10, "new2" -> 20) // 取得一个新映射包含所需更新

 

4、迭代映射

如下这段超简单的循环即可遍历映射中所有的键/值对偶

for ((k, v) <- 映射) 处理k和v

 翻转映射,交替键值位置

for ((k, v) <- 映射) yield (v, k)

 

5、已排序映射

 要得到一个不可变的树形映射而不是哈希映射的话可以用

val map = scala.collection.immutable.SortedMap()

如果要按照插入顺序访问所有键,使用LinkedHashMap

val map = scala.collection.mutable.LinkedHashMap()

 

6、元组

映射是键值对偶的集合。对偶是元组(tuple)的最简单形态,元组是不同类型的值的聚集。

元组的值是通过将单个的值包含在圆括号中构成的,例如  val t = (1, 3.14, "test")

可以使用_1、_2访问数组元

1 val second = t._2 // 可以使用_1, _2访问组元
2 // 通常使用模式匹配来获取元组的组元
3 val (first, second, third) = t // 将first设为1,second设为3.14,third设为“test”
4 // 可以在不需要的部位使用_
5 val (first, second, _) = t 
6 "New York".partition(_.isUpper) // 输出对偶(“NY”, "ew ork")

 

7、拉链操作

 使用元组可以把多个值绑定在一起,以便他们能够一起被处理,这通常可以使用zip方法来完成。

val symbols = Array("<", "-", ">")
val counts = Array(1, 10, 2)
val pairs = symbol.zip(counts)

 Array(("<", 2), ("-", 10), (">", 2))

使用toMap方法可以将对偶的集合转换成映射。如果你有你一个键的集合,以及一个与之平行对应的值的集合,那么你就可以使用拉练操作将他们组成一个映射。

keys.zip(values).toMap

  

Scala学习 —— 元组&映射