`
come_for_dream
  • 浏览: 117872 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Scala之哈希表使用探究

 
阅读更多

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的就介绍这里

 

1
0
分享到:
评论

相关推荐

    头歌Scala中集合的使用

    Scala中集合的使用 大学生 1. List 列表的使用 2. Set 集合的使用 3.Map 映射的使用 4. 元组的使用

    scala API 操作hbase表

    最近看了hbase的源码根据源码写了一些scala调动hbase表的API,话不多说直接上代码!Hadoop的版本是2.7.3,scala版本是2.1.1,hbase的版本是1.1.2 如果版本不同可以修改pom的依赖项,但要注意版本冲突。 并且在scala...

    scala哈希:Scala的快速非加密哈希函数

    scala哈希:Scala的快速非加密哈希函数

    scala 表结构 (各模块表对应关系)

    scala各模块表对应的关系 总帐/应收/应付/生产/库存/SY/各模块对应表

    mongo-scala-drive的使用demo

    基于最新的scala-mongo-driver使用scala操作mongo数据库,不是mongo-java-driver,网上很多教程都是基于java的不是mongo的,研究两天才知道咋用,一起学习哇

    scala sdk scala-2.12.3

    scala-2.12.3 scala-2.12.3 scala-2.12.3 scala-2.12.3

    scala + mybatis 数据库查询

    这是一个简单实用的scala集成mybatis数据库查询代码,简单明了

    scala 2.13.3 API 文档 Html离线版 scala-api.rar

    最新制作 scala 2.13.3 API 文档 Html离线版 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。

    Scala编程实战.zip

    此文档是讲解实战Scala,...本书面向实际的使用场景,提供了大量的Scala实例,同时,也给出底层的原理和相关的参考。对于Scala新手来说这是一本不错的入门书,对于老手来说也是一本夯实基础,检视自己所学知识的好书。

    Scala语法简明教程

    Scala语法简明教程.pdf

    spark源码之scala基础语法demo

    1:面向对象,可以定义class,通过new调用实例对象使用。 2:兼容java,在scala中可以直接调用java方法。 2:函数式编程,柯里化函数,匿名函数,高阶函数等。 3:代码行简单。 4:支持并发控制,Actor Model机制 5...

    scala-sbt-scala编译工具

    scala 编译工具 sbt 安装包。 Little or no configuration required for simple projects Scala-based build definition that can use the full flexibility of Scala code Accurate incremental recompilation ...

    Scala函数式编程

    很大篇幅都放在,使用scala实现scala默认库文件的API中,通过对简单的函数式编程逻辑的介绍和实践,主要是实践,建立起来一个比较明晰的scala思维模式,或者叫函数式编程的思维模式。 2 无副作用的函数式编程,同时...

    Scala学习之路(一)

    这篇文章是Scala方面的,scala的windows安装,scala的linux安装,以及第一个scala程序

    eclipse插件 scala下载

    scala eclipse插件 拷贝到相应的目录即可使用,百度一大堆

    大数据技术之Scala.docx

    大数据技术之Scala

    scala2.12.1Windows镜像包

    scala2.12.1Windows镜像包

    json4s, 其他 Scala json库要使用的单个 AST.zip

    json4s, 其他 Scala json库要使用的单个 AST JSON4S 目前,Scala 至少有 6个json库,而不是计算 java json库。 所有这些库都有非常相似的。 这里项目旨在提供一个由其他 Scala json库使用的单个 AST 。这时采取了...

    scala实战高清讲解

    scala编程进阶过程中不可或缺的书籍之一,详细介绍了scala语言的各种中高级语法,对于初学和高级开发人员有很大帮助

Global site tag (gtag.js) - Google Analytics