Scala快速入门-4-常用映射和元组操作

简介: 映射是键值对的集合n个对象(并不一定要相同类型的对象)的集合,元组

知识点


  • 映射是键值对的集合
  • n个对象(并不一定要相同类型的对象)的集合,元组

映射


  • 构造一个不可变(默认)映射(构造一个不可变的Map[String, Int],其值不能被改变)
1. scala> val scores = Map("Alice" -> 90, "Bob" -> 88)
2. scores: scala.collection.immutable.Map[String,Int] = Map(Alice -> 90, Bob -> 88)
• 构造一个可变映射
3. scala> val scores1 = scala.collection.mutable.Map("Alice" -> 90, "Bob" -> 88)
4. scores1: scala.collection.mutable.Map[String,Int] = Map(Bob -> 88, Alice -> 90)
• 构造一个空映射,需要选定一个映射实现并给出类型参数(注意最后是 方括号[] )
5. scala> val scores2 = new scala.collection.mutable.HashMap[String, Int]
6. scores2: scala.collection.mutable.HashMap[String,Int] = Map()
• 使用()获取映射中的值某个键对应的值
7. scala> val aliceScore = scores("Alice")
8. aliceScore: Int = 90
• 判断映射中是否包括某个指定键的值,用contains方法
9. scala> val bobScore = if(scores.contains("Bob")) scores("Bob") else 0
10. bobScore: Int = 88
11. 
12. // 简洁写法
13. scala> val bobScore1 = scores.getOrElse("Bob", 0)
14. bobScore1: Int = 88
• 可变映射中更新某个映射中的值或添加一个新的映射关系
15. scala> val scores1 = scala.collection.mutable.Map("Alice" -> 90, "Bob" -> 88)
16. scores1: scala.collection.mutable.Map[String,Int] = Map(Bob -> 88, Alice -> 90)
17. 
18. scala> scores1("Bob") = 99
19. 
20. scala> scores1
21. res1: scala.collection.mutable.Map[String,Int] = Map(Bob -> 99, Alice -> 90)
22. 
23. 
24. // 如果key不存在,添加一个新的映射关系
25. scala> scores1("Fred") = 79
26. 
27. scala> scores1
28. res3: scala.collection.mutable.Map[String,Int] = Map(Bob -> 99, Fred -> 79, Alice -> 90)
• 使用+=操作来添加多个关系(key不存在就添加,存在就更新)
29. scala> scores1 += ("Yezhiwei" -> 100, "Fred" -> 90)
30. res4: scores1.type = Map(Bob -> 99, Fred -> 90, Alice -> 90, Yezhiwei -> 100)
31. 
32. scala> scores1
33. res5: scala.collection.mutable.Map[String,Int] = Map(Bob -> 99, Fred -> 90, Alice -> 90, Yezhiwei -> 100)
• 使用-=操作来移除某个键值对
34. scala> scores1 -= "Bob"
35. res6: scores1.type = Map(Fred -> 90, Alice -> 90, Yezhiwei -> 100)
36. 
37. scala> scores1
38. res7: scala.collection.mutable.Map[String,Int] = Map(Fred -> 90, Alice -> 90, Yezhiwei -> 100)
• 不可变的映射可以有同样的操作,只是返回一个新的映射,而不会更新原对象
• 遍历映射中的所有键值对
39. scala> for((k, v) <- scores)
40.      | println(k + ":" + v)
41. 
42. // 运行结果     
43. Alice:90
44. Bob:88
• 像Java一样,keySet和values方法访问键或值
45. scala> scores1.keys
46. res9: Iterable[String] = Set(Fred, Alice, Yezhiwei)
47. 
48. scala> for(v <- scores.values) println (v)
49. 90
50. 88

元组


  • 元组是不同类型的值的聚集,元组的值是通过将单个的值包含在圆括号中构成的
scala> (1, 3.14, "Fred")
res11: (Int, Double, String) = (1,3.14,Fred)
  • 元组的各组元从1开始的,不是0。与数组和字符串中的位置不同
scala> (1, 3.14, "Fred")
res11: (Int, Double, String) = (1,3.14,Fred)
scala> res11._1
res12: Int = 1
  • 使用模式匹配来获取元组的组元
scala> val (first, second, third) = res11
first: Int = 1
second: Double = 3.14
third: String = Fred
  • 如果不需要所有的值,可以在相应位置上使用_占位
scala> val (first, second, _) = res11
first: Int = 1
second: Double = 3.14
  • 元组可以用于函数需要返回不止一个值的情况
scala> "Hello Scala".partition(_.isUpper)
res13: (String, String) = (HS,ello cala)
相关文章
|
11月前
|
Scala
161 Scala 元组
161 Scala 元组
42 0
|
11月前
|
Java Scala
160 Scala 映射
160 Scala 映射
37 0
|
5月前
|
分布式计算 Scala Spark
Scala【集合常用方法和函数操作(下)】
Scala【集合常用方法和函数操作(下)】
|
5月前
|
分布式计算 Scala Spark
Scala 【集合常用方法和函数操作-上】
Scala 【集合常用方法和函数操作-上】
|
4月前
|
Scala
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
24 0
|
4月前
|
Java 大数据 Scala
Scala快速入门--Scala环境搭建【Windows10】图解
Scala快速入门--Scala环境搭建【Windows10】图解
52 0
|
分布式计算 算法 Hadoop
Scala数组和元组
Scala数组和元组
88 0
|
消息中间件 Java 大数据
Scala快速入门
Scala快速入门
101 0
|
存储 分布式计算 Scala
Spark-RDD 键值对的操作(Scala版)
Spark-RDD 键值对的操作(Scala版)
Scala快速入门-11-常用集合操作
所有的集合都扩展自Iterable特质 集合有三大类,分别为序列、集和映射 几乎所有集合类,Scala都同时提供了可变和不可变的版本 Scala列表要么是空的,要么拥有一头一尾,其中尾部本身又是一个表列 集是无先后次序的集合 用LinkedHashSet来保留插入顺序,或用SortedSet来按顺序进行迭代 +将元素添加到无先后次序的集合中;+:和:+向前或向后追加到序列;++将两个集合串接在一起;-和--移除元素 映射、折叠和拉链操作是很有用的技巧,用来将函数和操作应用到集合中的元素