zoukankan      html  css  js  c++  java
  • Scala的映射和元组操作

    映射和元组操作

    • 构造Map
        // 构造一个不可变的MAP映射,类似与key -> value这样的组合叫做对偶
        val score = Map("Jack" -> 12, "Bob" -> 20)
        // 也可以这种创建一个Map映射
        val score1 = Map(("Jack", 12), ("Bob", 20))
        // 根据key获取value,类似java中的map.get(key)若是获取一个不存在的key则会报错而不是null
        println(score("Jack"))
        // 获取元素不存在给出无元素提醒
        val flag = if (score.contains("haha")) score.get("haha") else "no such element"
        val flag1 = score.getOrElse("haha", "no such element")
        // 创建可变Map
        val score = scala.collection.mutable.Map("Jack" -> 12, "Bob" -> 20)
    
    • 更新映射中的值
    在可变的映射中,可以更新某个映射的值,在=号左侧使用():
    // 更新可变的Map的值
    scores("Bob") = 10
    // 添加新的key-value
    scores("haha")=7
    // 也可以使用+=操作和创建映射关系
    scores +=("Michael" -> 22)
    // 移除某个键对应的值
    score -=("Michael")
    
    • 迭代映射
    for((k,v) <- 映射) 这种可以得到每一个的键值对
    // 和java一样可以使用keySet和values方法,values方法将会返回一个iterable
    score.keySet // 返回类似("Bob","Michael")
    // 获取map的value
    for (v <- score.values) println(v)
    
    • 排序映射

    操作映射时,需要选定一个实现---哈希表或者平衡树,默认情况Scala中式hash表,若想顺序访问所有的键,因此需要一个树形映射

    val scores = scala.collection.immutable.SortedMap("Bob" -> 10,"michael" -> 12)
    
    • 与java的互操作
    // import scala.collection.javaConversions.mapAsScalaMap 然后指定Scala映射类型触发转换
    val scores:scala.collection.mutable.Map[String,Int] = new java.util.TreeMap[String,Int]
    // import scala.collection.javaConversions.propertiesAsScalaMap
    val props :scala.collection.Map[String,String] = System.getProperties()
    // 以上都是将java的map转为Scala的map,可以将Scala的map转为java的mao
    import scala.collection.javaConversions.mapAsJavaMap
    
    • 元组

    映射式键值对的集合,对偶式元组(tuple)的最简单的形态---而元组式不同类型值得聚集

    (1,95.27,"Bob") 是一个元组类型为(Int,Double,java.lang.String)可以方法_1,_2,_3访问元组例如以下元组:
        val l = (1,2.34,"哈哈")
        println(l._2)
    
    • 拉链操作
    // 使用元组可以将他们映射起来使用zip方法
        val symbols = Array("<","-",">")
        val counts = Array(2,10,2)
        val pairs = symbols.zip(counts)
        println(pairs.toBuffer)
        // 打印<<---------->>
        for ((s,n) <- pairs) Console.print(s * n)
    
  • 相关阅读:
    sql server 2008数据复制方法
    排错技能:任务管理器中追踪某w3wp.exe是哪个IIS站点的application pool
    SplendidCRM中给来自EditView中的listbox控件设置选中值或数据源
    jQuery String Functions
    [转]jquery getJSON 数据联动(采用序列化和反序列化获取数据) .
    [转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")
    深入理解C语言
    Qt回忆录之配置开发环境
    360电话面试
    浅谈C++设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/codegeekgao/p/9615925.html
Copyright © 2011-2022 走看看