Scala基礎(5) Map 元組

2021-07-15 19:36:21 字數 2754 閱讀 9500

val a = ("johnny", 2016, "yang")

val b = ("johnny","yang") //最簡單的元組:對偶

val yzsecond1 = yz._2//取出第二個元素

val yzsecond2 = yz _2;

println("第二個值是" + yzsecond1)

println("第二個值是" + yzsecond2)

// 使用模式匹配

val (first, second, _) = yz

println("first:" + first + ";second:" + second)

}

元組取值和陣列不一樣,yz._1表示取出第乙個元素

scala中map(對映)分為可變對映和不可變對映兩種,預設建立不可變對映。

// 構建擁有3個對偶的不可變對映

val map1 = map("alice" -> 10, "bob" -> 3, "cindy" -> 8)

// 構建空的對映可變對映

val map2 = new scala.collection.mutable.hashmap[string, int] //這裡指定對映實現為hashmap,型別引數為string和int

// 構建擁有3個對偶的可變對映

val map3 = scala.collection.mutable.map("alice" -> 10, "bob" -> 3, "cindy" -> 8)

// 通過對偶建立對映

val map4 = map(("alice", 10), ("bob", 3), ("cindy", 8))

「->」 符號用於建立對偶

「alice」 -> 10 會生成 (「alice」,10)

取值

val arg1 = m("bob")

// scala直接通過 對映(鍵) 來獲取元素,通過 對映.get(鍵) 得到的是乙個option物件

val arg2 = if (m.contains("bob")) m("bob") else

0// 如果不存在會丟擲異常,因此需要作出檢查

val arg3 = m.getorelse("bob", 0)// 同上,但是不會報錯,如果沒有"bob"會返回0

更新
/*更新可變對映*/

m("bob") =

10 m +=("bob"

->

10, "fred"

->

15) //有就更新,沒有就插入

m -=

"bob"

// 移除

} /*更新不可變對映*/

val newmap = m + ("bob"

->

10, "fred"

->

16) // 更新不可變對映會建立新的對映,newmap 包含 m 相同對映關係,然後bob被更新,fred被新增進來

遍歷
/*遍歷對映*/

for ((k, v) <- m) println("k:" + k + ";v:" + v)

for ((k, v) <- m) yield (v, k)//返回乙個集合,鍵值反轉

/*遍歷對映的鍵*/

for (k <- m.keyset) print("k:" + k)

/*遍歷對映的值*/

for (v <- m.values) print("v:" + v)

// 拉鍊操作

val symbols = array("<", "-", ">")

val counts = array(2, 10, 2)

val pairs = symbols.zip(counts) // 輸出對偶的陣列 array(("<",2),("-",10),(">",2))

for ((s, n) <- pairs) console.print(s * n) // 輸出:<<-------->>

val m = pairs.tomap // 轉化成對映

mapiterate(m)//遍歷

拉鍊操作步驟:

建立兩個陣列,arra用於存放鍵,arrb用於存放值

使用arra.zip(arrb)來生成乙個新的對偶陣列arrc

使用陣列的tomap方法將對偶陣列轉化成對映

需要注意的:

scala.collection.mutable 和 scala.collection.immutable 中hashmap和map的區別

package yangjun.mypackage

import yangjun.myclass.person

import scala.collection.mutable //可變的

import scala.collection.immutable //不可變的

/** * created by yang jun on 2016/7/23.

*/object

test

def demo001(): unit =

def demo002(): unit =

def demo003(): unit =

def demo004(): unit =

}

詳見

scala練習題 Scala基礎

1 在scala repl中,計算3的平方根,然後再對該值求平方。現在,這個結果與3相差多少?scala scala.math.sqrt 3 warning there were 1 deprecation warnings re run with deprecation for details r...

Scala基礎學習 scala集合 005

定長陣列 println test val a new array string 5 a.length a 0 hello 賦值 a 1 取值 b 1 flink 可以修改值,並沒有修改指標 val c array 1,2,3,4,5,6 c.mkstring 轉換為字串 c.mkstring c....

scala快速上手 二 Scala 基礎

定義變數和常量 變數 用 var 定義 可修改 常量 用 val 定義,不可修改 var name zhangsan println name name lisi println name val gender m gender m 錯誤,不能給常量再賦值 class person object l...