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
