当前位置:首页 > 开发 > 编程语言 > Scala > 正文

Scala之哈希表使用探究

发表于: 2014-11-18   作者:come_for_dream   来源:转载   浏览次数:
摘要: Scala之哈希表使用探究         一个经典的程序员名言是:“如果只能用一种数据结构,那就用哈希表吧。”哈希表,更笼统的说,映射--是最灵活的数据结构之一。        下面介绍神奇的Scala对Map的使用 一、构造映射  &nbs

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之哈希表使用探究

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
二进制的世界,来往管道的串,将去往何方。是自由的散列,还是明确的前行,万千冲突的耦合,以何构
今天初步学习了数据结构中的哈希表。 首先在概念上,哈希表和数组队列,链表一样,是一种用来储存数
哈希表中,一串连续的已填充单元叫做填充序列。增加越来越多的数据项时,填充序列变的越来越长,这
scala解释器是编写scala表达式和程序的交互式“shell”。只要在解释器里输入表达式,它就能计算并打
一、哈希表的构造 哈希表的构造方法包括直接定址法、数字分析法、平方取中法、折叠法、随机数法和除
哈 希 表 传统上,在表中查找一个指定记录的方法都是遍历表中的所有记录直到出现一个匹配的关键字为
前面我们已经安装了:Java1.7版本与scala2.10.1版本,那以我们这里就选择eclipse4.3(Kepler),最好
Participants: ZY, LF, HZP, CPP Date: <st1:chsdate isrocdate="False" month="9" w:st="on" da
概述 SkipList 是由William Pugh发明的一种数据结构,它的作用类似平衡二叉树,对查找,删除,插入
【转】 这一节涉及数学超级多,各种数论知识,各种不明觉厉! 看了几遍,才勉强看懂一些,所以这 篇
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号