scala——基础语法:4.映射Map用法

1. Scala映射(Map)是一组键/值对的对象。

任何值都可以根据键来进行检索。键在映射中是唯一的,但值不一定是唯一的。映射也称为哈希表。映射有两种,不可变的和可变的。可变对象和不可变对象之间的区别在于,当对象不可变时,对象本身无法更改。

 

默认情况下,Scala使用不可变映射(Map)。如果要使用可变集合(Set),则必须明确导入scala.collection.mutable.Map类。如果想同时使用可变的和不可变映射(Map),那么可以继续引用不可变映射(Map),但是可以将mutable集合引用mutable.Map。

scala> import scala.collection.mutable.Map import scala.collection.mutable.Map

scala> var map = Map(1 -> "a", 2 -> "b", 3 -> "c") 

map: scala.collection.mutable.MapInt,String] = Map(2 -> b, 1 -> a, 3 -> c) 

scala> println(map.keys)

Set(2, 1, 3)

scala> println(map.values) 

HashMap(b, a, c)

scala> println(map.isEmpty)

false

scala> map += (4 -> "d")

res12: scala.collection.mutable.MapInt,String] = Map(2 -> b, 4 -> d, 1 -> a, 3 -> c) 

scala> map.foreach(value => print(value + " "))

(2,b) (4,d) (1,a) (3,c) 

scala>

 

var map1 = Map(1 -> "a", 2 -> "b", 3 -> "c")

map1.getOrElse("c#",-1)

取值,取不到返回-1

 

转成映射(key-value)类型

元组转映射:

val arr = Array(("tom",1),("jerry",2),("dog",3))

arr.toMap

元组:

val t = ("scala",3.14,100L,("spark",1))

取spark:t._4._1

拉链:

val arr1 = Array(tom,jerry,dog)

val arr2 = Array(1,2,3)

arr1 zip arr2

或者arr1.zip(arr2)

 

 

2. 将函数映射到集合

任何一种函数式语言中,都有map函数与faltMap这两个函数

 

map函数的用法,顾名思义,将一个函数传入map中,然后利用传入的这个函数,将集合中的每个元素处理,并将处理后的结果返回。

而flatMap与map唯一不一样的地方就是传入的函数在处理完后返回值必须是List,其实这也不难理解,既然是flatMap,那除了map以外必然还有flat的操作,所以需要返回值是List才能执行flat这一步。

scala> val nums=List(1,2,3,4)

nums: ListInt] = List(1, 2, 3, 4) 

scala> nums.map(x=>2+x) 

res24: ListInt] = List(3, 4, 5, 6)

scala> nums.map(_+1) 

res25: ListInt] = List(2, 3, 4, 5)

scala> val data = List("Hadoop","Java","Spark") 

data: ListString] = List(Hadoop, Java, Spark)

scala> println(data.flatMap(_.toList))

List(H, a, d, o, o, p, J, a, v, a, S, p, a, r, k)

 

 

scala的集合有3大类:Seq(序列)、Set(集合)、Map(映射)

序列:

scala> val list1 = List(1,2,3)

scala> list1.append(4)

 

集合:

scala> import scala.collection.mutable.HashSet

val set1 =new HashSet[Int]()

set1 += 1

或set1.add(1)

set1 ++= Set(4,5,6)

set1.remove(1)

set有去重功能

 

映射:

scala> import scala.collection.mutable.HashMap

import scala.collection.mutable.HashMap

scala> val map1 = new HashMap[String, Int]() 

map1: scala.collection.mutable.HashMap[String,Int] = Map()

scala> map1("scala") = 1

scala> map1 

res3: scala.collection.mutable.HashMap[String,Int] = Map(scala -> 1) 

scala> map1 += (("java",2),("python",3))

res4: map1.type = Map(scala -> 1, java -> 2, python -> 3)

scala> map1.put("c++",4)

res5: Option[Int] = None 

scala> map1

res6: scala.collection.mutable.HashMap[String,Int] = Map(scala -> 1, c++ -> 4, java -> 2, python -> 3) 

scala>

删除:

map1 -= "java"

map1.remove("c++")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值