`
come_for_dream
  • 浏览: 120333 次
  • 性别: 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 API操作HBase至关重要。同时,熟悉HBase的RegionServer和Master节点的工作原理也有助于优化你的应用程序性能。

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

    通过研究这些内容,你可以更深入地理解如何在Scala项目中集成和使用这些高效的哈希算法。学习和应用这些哈希函数可以帮助你优化数据处理流程,提高程序性能,并为大型数据集提供可靠的数据索引和分桶策略。 总的来...

    mongo-scala-drive的使用demo

    在 Scala 中与 MongoDB 进行交互,通常我们会使用 `mongo-scala-driver`,而不是 `mongo-java-driver`,因为 Scala 驱动提供了更符合 Scala 语言特性的 API 设计。本示例将详细介绍如何使用 `mongo-scala-driver` ...

    使用Scala进行Web开发:构建你的第一个Web应用.md

    使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发使用Scala进行Web开发...

    scala + mybatis 数据库查询

    通过使用Scala的Java互操作性,我们可以无缝地在Scala中使用MyBatis。 - 集成步骤通常包括添加MyBatis和其Scala绑定库到项目依赖,配置MyBatis的SqlSessionFactory,并编写Scala版的Mapper接口。 2. **Scala版的...

    scala3 scala3 scala3 scala3 scala3

    在Scala3中,最重要的变化之一是类型推断的增强。新的Typelevel Scala项目引入了更强大的类型系统,允许编译器更加智能地推断变量和函数的类型,减少了程序员在代码中显式声明类型的需要。例如,`given` 关键字用于...

    scala sdk scala-2.12.3

    通过学习和使用Scala SDK,开发者可以利用其丰富的语言特性来构建复杂的软件系统,尤其是在大数据处理、Web应用、云计算等领域,Scala已经展现出了强大的生命力。例如Apache Spark,一个流行的分布式计算框架,就是...

    Scala语法简明教程

    - **分布式运行**:Scala设计之初就考虑到了并行和分布式计算的需求,能够很好地支持大规模数据处理和分布式应用程序开发。 - **与Java和C#无缝集成**:Scala能够在JVM上运行,因此可以直接访问Java库,与Java程序...

    scala2.12.1Windows镜像包

    Scala是一种强大的多范式编程语言,它融合了面向...总的来说,"scala2.12.1Windows镜像包"是Windows用户开始Scala编程之旅的基础,通过安装这个包,你可以配置好Scala开发环境,进一步探索这个强大而富有表现力的语言。

    scala-2.12.10.zip

    Scala的语法优雅且富有表达力,它允许开发者使用函数式编程的特性,如高阶函数、柯里化、模式匹配和不可变数据结构,同时保留了面向对象的类、接口和继承。这使得Scala成为处理大数据、并发和分布式计算的理想选择,...

    Scala学习之路(一)

    使用IntelliJ IDEA作为开发Scala项目的首选IDE,需要对IDEA进行相应的配置以支持Scala开发。 ##### 3.1 IDEA中安装Scala插件 1. **插件安装**: 打开IDEA,进入插件管理界面(通常位于右下角的“Configure”-&gt;...

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

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

    大数据技术之Scala.docx

    学习Scala语言之所以重要,是因为Spark就是使用Scala编写的,因此为了更好的学习Spark,需要掌握Scala这门语言。Spark的兴起,带动Scala语言的发展。 Scala语言的特点: 1. Scala是一门多范式的编程语言,支持...

    最好的scala学习 课件

    首先,我们从"Scala进阶之路-part01-基础.pdf"开始,这部分内容主要涵盖了Scala的基础知识。你会学习到Scala的语法结构,包括变量声明、常量、数据类型(如基本类型、引用类型、集合类型)、运算符、流程控制语句...

    scala实战高清讲解

    - Scala的独特之处在于它允许开发者根据需求自由选择面向对象或函数式编程风格,或者两者的结合。 10. **案例研究** - Spark:Apache Spark是一个基于Scala构建的大数据处理框架,展示了Scala在大数据领域的应用...

    Scala考试题1

    - Scala 使用 REPL(Read-Eval-Print Loop),Java 需要编译。 - Scala 有更强大的模式匹配,Java 需要使用 switch-case 或者 if-else。 15. **Java 集合与 Scala 集合的转换**: - 导入 `scala.jdk....

    scala程序员面试算法宝典代码

    - 哈希表:哈希表提供快速的存取时间复杂度,Scala中的Map和HashSet是哈希表的典型实现。 2. **排序与查找算法** - 冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序:这些是常见的排序算法,理解它们...

Global site tag (gtag.js) - Google Analytics