zoukankan      html  css  js  c++  java
  • scala映射和元组

    scala映射,是一对键值对,相当于java中的Map

    对偶:由两个值构成的组,形式 : 值1->值2,值1和值2类型不一定要相同,可以理解为对偶就是一个key/value

    映射就是对偶的集合

    示例:

    val socres2= scala.collection.immutable.Map("Alice"->3,"Bob"->10,"Imok"->8) // 不可修改的映射
    val socres= scala.collection.mutable.Map("Alice"->3,"Bob"->10,"Imok"->8) //可修改映射

    创建一个空值的映射,需要选定一个映射的实现并给出类型参数

    val socres = scala.collection.mutable.HashMap[String.Int]

     映射的另一种表示方法

    val scores = Map(("Alice",10),("Bob",10),("Imok,8"))

     映射基本操作

    1、取值

    val v = socres("Alice") // 等价于 val v = socres.get("Alice").get 
    映射的get方法返回的是一个Option类对象,要么是Some,要么是None
    val v = if(socres.contains("Bob")) socres("Bob") else 0 // 等价于 val v = socres.getOrElse("Bob",0)

    2、更新、添加、删除

    socres("Alice") = 19 //更新
    
    socres+=("Fred"->7,"Tom"-> 16) //添加多个
    
    socres-="Alice" //删除

    3、不可变的映射虽然不能去修改,但是可以在其基础上做一些操作构建一个新的映射

    val socres2= scala.collection.immutable.Map("Alice"->3,"Bob"->10,"Imok"->8) // 不可修改的映射
    val score3 = scores2 + ("Tom"->7,"Bob"->6) //Tom->7 添加了,"Bob"->6更新了
    
    val score3 = scores2 - "Alice" //去掉 "Alice" 的新的映射

    4、迭代映射

      //迭代映射
      for((k,v) <- socres)
        println(k + ":" + v)
        
      //迭代键值k
      for(k <- socres.keySet)
        println(k + ":" + socres(k))
      
      //迭代值 v
      for(v <- socres.values)
        println(v)

    5、反转映射

    for((k,v) <- socres) yield (v,k) //键值交换

    6、 有序映射

    SortedMap、LinkedHashMap

    元组

    元组是不同类型的值的聚集,对偶是元组的最简单的实现

    val t = (1,3.14,"Fred")
    
    var second = t._2 //通过_1 _2 _3访问组元 ,另外一种表示方法 t _2
    
    
         
    使用模式匹配获取组元
      val t = (1,3.14,"Fred")
      val (first,second,third) = t
      println(first) //1
      println(second) //3.14
      println(third) //Fred

    拉链操作

    有一个键的集合,以及与之平行的值的集合,可以用拉链操作(zip方法)将它们组成一个映射 

      val symbools = Array("<","-",">")
      val counts = Array(2,10,2)
      val pairs = symbools.zip(counts) //构成对偶数组 Array((<,2)(-,10)(>,2)),可以同步toMap方法将对偶集合转换成映射
       
      for(i <- 0 until pairs.length)
          print(pairs(i)) // 
       
      for((s,n) <- pairs) print(s*n)
  • 相关阅读:
    问题:android学习内容破碎,我个人关于如何学习android的一些个人经历
    问题:一球从某高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?
    问题:alias设置与删除
    问题:从键盘读取特定类型的数据(使用Scanner读取int类型)
    求一个数组当中最大(最小)值的两种计算方法
    Mysql5.7安装
    maven下载及安装
    Ubuntu下修改DNS重启也能用的方法
    删除CNNIC证书
    字符编码ASCII, Unicode和UTF-8概念扫盲
  • 原文地址:https://www.cnblogs.com/xiaojianfeng/p/9791264.html
Copyright © 2011-2022 走看看