zoukankan      html  css  js  c++  java
  • scala学习笔记(4)映射和元组

    1.构造映射

    //构造这样的一个映射
      val sources=Map("Alice"->10,"Bob"->3,"Cindy"->8)  //构造了一个不可变的Map[String,Int],值不能改变,

    //可变映射

    val scores = new scala.collection.mutable.HashMap[String,Int]
    //映射是对偶的集合。简单来说就是两个值构成的组,这两个值不一定适合同一类型的,如("Alice",10)。->操作符用来创建对偶:
        "Alice"->10   改代码产出的值是:("Alice",10)

    2.获取映射中的值:在scala中,函数和映射之间的相似性尤为明显,因为用()表示法来查找某个键对应的值

    val bobsScore = if (scores.contains("Bob")) scores("Bob") else 0

    val bobSource=sources("Bob")    //类似于Java中的sources.get("Bob"),如果映射中不包含请求中使用的键值,就会抛出异常
      创建可变map
      scala>val map = new scala.collection.mutable.HashMap[Int,Int]
      scala>val map = new scala.collection.mutable.HashMap[Int,Int]()  //调用apply方法

    3.更新映射中的值,在可变映射中,可以更新某个映射的值,或者添加一个映射关系,做法是在=号左侧使用():
      scores("bob")=10    //更新"bob"对应的值
      scores("Fred")=7    //更新新的键值对/值对偶到scores(假定是可变的)
      scores+=("Bob"->10,"Fred"->7)  //通过+=操作添加多个关系
      scores-="Alice"          //通过-=移除某个键值对 
      
      val newScores = scores+("Bob"->10,"Fred"->7)  //更新过的新映射,newScores映射包含了与scores相同的映射关系
      并且"Bob"也被更新,"Fred"被添加进来了

      var scores=....
      scores =scores+("Bob"->10,"Fred"->7)  //更新var变量

      要从不可变映射中移除某个键,需要用-操作符来获取一个新的去掉该映射:
        scores =scores -"Alice"
     4.迭代操作
      
    for((k,v)<-映射)    //循环遍历映射中的所有键值对偶
    scores.keySet        //一个类似Set("Bob","Cindy","Fred","Alice")这样的集合
    for(v<-scores.values) println(v)    //将打印10 8 7 10
    
    for((k,v)<- 映射) yield(v,k)        //翻转一个映射,交换键和值的位置

      5.已排序映射

        得到一个不可变的树形映射

    val scores = scala.collection.immutable.SortedMap("Alice"->10,"Fred"->7,"Bob"->3,"Cindy"->8)

      6.与java的互操作

    import scala.collection.JavaConversions.mapAsScalaMap //通过制定的scala映射类型来触发转换
    val scores:scala.collection.mutable.Map[String,Int0=new java.util.TreeMap[String,Int]

    import scala.collection.JavaConversions.propertiesAsScalaMap
    val props :scala.collection.map[String,String]=System.getProperties

      7.元组

        映射是键/值对偶的集合;对偶是元组的最简单形态,元组是不同类型值的聚集

        元组的值是通过将的单个的值包含在圆括号中构成的:(1,3.14,"Fred")是一个元组,类型为Tuple3[Int,Double,java.lang.String]
        类型定义也可以写为(Int,Double,java.lang.String)
        eg:val t = (1,3.14,"Fred")  可以通过_1、_2、_3访问其元组
          val second =t._2    //将second设置为3.12  ,这个地方可以把t._2写为t _2(用空格而不是句点),但是不能写成t_2.
        
        使用模式匹配的方式来获取元组的组元,如:val (first,second,thrid)=t  //将first设置为1,second设置为3.14,thrid设置为为"Fried"
        如果不是所有的部件都需要,那么可以在不需要的部件上用_:val (first,sceond,_)=t

        元组可以用于函数需要返回不止一个值的情况。维数最高22
        元组tuple scala>val t = (1,"tom",12)
     8.拉链操作
        Zpping咬合操作。使用元组的原因之一就是把多个值绑定在一起,以便他们能够被处理
        下面代码:
      
    val symbols = Array("<","-",">")
    val counts = Array(2,10,2)
    val pairs = symbols.zip(counts)        //输出对偶数组:Array(("<",2),("-",10),(">",2)),这些对偶可以被一起处理:
    for((s,n)<pairs) Console.print(s*n)  //会打印

    //数组



  • 相关阅读:
    CSS Sprite笔记
    前端分页页码静态部分制作
    有趣的网页小部件笔记
    Lintcode 85. 在二叉查找树中插入节点
    Lintcode 166. 主元素
    网页失去焦点标题变化效果
    Lintcode 166. 链表倒数第n个节点
    Lintcode 157. 判断字符串是否没有重复字符
    Lintcode 175. 翻转二叉树
    Lintcode 372. O(1)时间复杂度删除链表节点
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9648891.html
Copyright © 2011-2022 走看看