Scala之哈希表使用探究
来源:互联网 发布:淘宝推广培训学校 编辑:程序博客网 时间:2024/06/05 12:50
Scala之哈希表使用探究
一个经典的程序员名言是:“如果只能用一种数据结构,那就用哈希表吧。”哈希表,更笼统的说,映射--是最灵活的数据结构之一。
下面介绍神奇的Scala对Map的使用
一、构造映射
1.构造不可变映射
val scores=Map("Alice"->10,"Bob"->8,"City"->5)
上述代码构造出一个不可变的Map[String,Int],其值不能不被改变(不能添加、不能更新值)
2.构造可变映射
val scores=scala.collection.mutable.Map("Alice"->10,"Bob"->8,"City"->5)
3.构造一个空的映射
val scores=new scala.collection.mutable.HashMap[String,Int]
4.使用对偶定义映射
val scores=Map(("Alice",10),("Bob",8),("City",5))
二、操作映射
1.获取映射中的值
val BobScores=scores("Bob")
但是如果汀射中不包含请求中使用的键,则会抛出异常
所以我们在取值之前可以用contains方法来查看映射中是否含有指定的键
val BobScores=if(scores.contains("Bob"))scores("Bob") else 0
当然可以使用以下比较快捷的方式
val BobScores=scores.getOrElse("Bob",0) val BobScores=scores.get("Bob")
这样的调用返回一个Option对象,要么是Some(键对应的值),要么是None
2.在映射中添加或者更新关系
scores("EE")=10 scores("Bob")=10
更新或者添加多个关系
scores+=("AA"->10,"BB"->8,"CC"->5)
移除映射中的关系
scores-="Bob"
我们不更更新不可变数组但是我们可以获得一个需要更新的心的映射
val tmp = Map("Alice" -> 10, "Bob" -> 8, "City" -> 5) val combine = tmp + ("Alice" -> 10, "XX" -> 8) val remove = combine - "Alice" println(combine.mkString("、")) println(remove.mkString("、"))
打印结果:
Alice -> 10、Bob -> 8、City -> 5、XX -> 8 Bob -> 8、City -> 5、XX -> 8
三、迭代映射
1.遍历映射中的元素
for((k,v)<-映射) 处理k,v
例,这里涉及模式匹配的知识,在后面会有介绍到
for((k,v) <- remove){ print(k+"--->") println(v) } println(remove.keySet) println(remove.values)
打印出
Set(Bob, City, XX)
MapLike(8, 5, 8)
2.当然我们可以进行一个映射的反转
val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 8, "City" -> 5)
//我们可以用这种比较容易理解的方式
val test = for ((k, v) <- scores) yield (v, k)
//但是我们也可以使用这种更加Scala的用法
val easy = scores.map(x => (x._2, x._1)) println("scores:\n"+scores.mkString("、")) println("test:\n"+test.mkString("、")) println("easy:\n"+easy.mkString("、"))
打印结果为
scores: Bob -> 8、City -> 5、Alice -> 10 test: 8 -> Bob、5 -> City、10 -> Alice easy: 8 -> Bob、5 -> City、10 -> Alice
3.我们也可以对映射进行过滤,下面的例子是对map进行过滤并反转键值
//这是一种比较常规的方法
val forFilter = for ((k, v) <- scores if v > 6) yield (v, k)
//这是比较Scala的做法也是让我狂热的方法
val scalaFilter = scores.filter(x => (x._2 > 6)).map(x => (x._2, x._1)
关于Map的就介绍这里
- Scala之哈希表使用探究
- Scala之Trait的使用
- Scala语言探究(一)
- scala学习之Scala中类的使用
- Scala 之 使用JDBC 操作 mysql
- 【Scala】Scala之Objec
- 【Scala】Scala之Objec
- Java线程池总结之从使用探究源码实现
- springboot定时器的使用 之 cron fixedRate initialDelay 探究
- scala使用
- scala 使用
- 【Scala】Scala之Control Structures
- [Scala--基础]---Scala枚举使用
- 程序员之路探究
- 程序员之路探究
- ALSA之snd_kcontrol探究
- ALSA之snd_kcontrol探究
- 探究声卡之controls
- 异常之旅
- Hibernate多对多映射
- Spark编程模型(之莎士比亚文集词频统计实现)
- Scala基本语法初探
- Scala之数组
- Scala之哈希表使用探究
- [CodeVs2645] Spore
- 浅谈UML建模
- linux下启动java程序的通用脚本2
- ListView OnScrollListener详解(滑屏分页显示数据)
- Spring之构造注入与设值注入
- Tools:downloading and Building EDK II工具篇:安装/使用EDKII源码获取/编译工具[2.3]
- Struct对齐方式
- Linux命令学习之路---关机(shutdown)命令