Map
- 创建Map
// 创建一个不可变的Map
scala>
val ages =
Map(
"Leo" ->
30,
"Sparks" ->
25)
ages: scala.collection.immutable.
Map[
String,
Int] =
Map(
Leo ->
30,
Sparks ->
25)
// 创建一个可变的Map
scala>
val ages = scala.collection.mutable.
Map(
"Leo" ->
20,
"JEN" ->
23)
ages: scala.collection.mutable.
Map[
String,
Int] =
Map(
JEN ->
23,
Leo ->
20)
scala> ages(
"Leo") =
31
// 使用另外一种方式定义Map元素
scala>
val ages =
Map((
"leo",
30), (
"sparks",
20))
ages: scala.collection.immutable.
Map[
String,
Int] =
Map(leo ->
30, sparks ->
20)
// 创建一个空的HashMap,必须是实现类而不是抽象接口
scala>
val ages =
new scala.collection.mutable.
HashMap[
String,
Int]
ages: scala.collection.mutable.
HashMap[
String,
Int] =
Map()
- 访问Map元素
// 使用contains函数检查key是否存在
scala>
val leoAge =
if (ages.contains(
"Leo")) ages(
"Leo")
else
0
leoAge:
Int =
0
// getOrElse函数
scala>
val leoAge = ages.getOrElse(
"Leo",
0)
leoAge:
Int =
0
- 修改Map元素
// 添加或者更新元素
scala> ages(
"Leo") =
31
// 添加多个元素
scala> ages += (
"Mike" ->
34,
"Tom" ->
40)
// 移除元素
scala> ages -=
"Mike"
// 变相更新不可变map
scala>
val ages2 = ages + (
"Mike" ->
34,
"Tom" ->
40)
- 遍历Map
// 遍历map的entrySet
scala>
for((key, value) <- ages) println(key +
" " + value)
// 遍历key
scala>
for(key <- ages.keySet) println(key)
// 遍历value
scala>
for(value <- ages.values) println(value)
// 生成新map,反转key和value
scala>
for((key, value) <- ages)
yield (value, key)
- SortedMap & LinkedHashMap
// SortedMap可以自动对Map的key排序,按照字母顺序
scala>
val ages = scala.collection.immutable.
SortedMap(
"leo" ->
30,
"alice" ->
15)
ages: scala.collection.immutable.
SortedMap[
String,
Int] =
Map(alice ->
15, leo ->
30)
// LinkedHashMap可以记住插入entry的顺序
scala>
val ages =
new scala.collection.mutable.
LinkedHashMap[
String,
Int]
ages: scala.collection.mutable.
LinkedHashMap[
String,
Int] =
Map()
scala> ages(
"leo") =
30
scala> ages(
"Sparks") =
20
scala> ages
res70: scala.collection.mutable.
LinkedHashMap[
String,
Int] =
Map(leo ->
30,
Sparks ->
20)
元组Tuple
Scala元组将固定数量的项目组合在一起,以便它们可以作为一个整体传递。 与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的。(可以用作自定义数据类型)
// 创建Tuple
scala>
val t = (
"leo",
30,
"hello")
t: (
String,
Int,
String) = (leo,
30,hello)
// 访问Tuple
scala> t._1
// zip操作
scala>
val names =
Array(
"leo",
"jack",
"mike")
names:
Array[
String] =
Array(leo, jack, mike)
scala>
val ages =
Array(
30,
24,
25)
ages:
Array[
Int] =
Array(
30,
24,
25)
scala>
val nameAges = names.zip(ages)
nameAges:
Array[(
String,
Int)] =
Array((leo,
30), (jack,
24), (mike,
25))
scala>
for ((name, age) <- nameAges) println(name +
":" + age)
leo:
30
jack:
24
mike:
25