• 快学Scala(4)--映射和元组


    构造映射:

    val scores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)  //不可变映射
    val scores2 = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)  //可变映射
    val socres3 = new mutable.HashMap[String, Int]  //空映射

    获取映射中的值:

    val bobScore = scores("Bob")    //类似于Java中的scores.get("Bob"),如果映射不包含请求中使用的键,则会抛出异常
    

    检查是否有某个指定的键:

    val bobScore1 = if(scores.contains("Bob")) scores("Bob") else 0
    val bobScore2 = scores.getOrElse("Bob", 0)    //若映射中包含"Bob",则返回对应的值,否则返回0
    

      

    更新映射中的值:

    scores2("Bob") = 10
    scores2("Fred") = 7
    scores2 += ("Bob" -> 10, "Fred" -> 7)
    scores2 -= "Alice"
    val newScores = scores + ("Bob" -> 10, "Fred" -> 7)   //更新过的映射
    

      注:只能更新一个可变映射中的键值对;但是对于不可变映射可以使用最后一种方法

    迭代映射:

    println(scores.keySet)
    for(v <- scores.values) println(v)
    println("")
    for(k <- scores.keys) println(scores(k))
    println("")
    for(k <- scores.keySet) println(scores(k))
    

      输出结果:

    与Java的交互操作:

    import scala.collection.JavaConverters._
    
    ...
    
    val scores4 : java.util.Map[String, Int] = scores2.asJava
    val scores5 : mutable.Map[String, Int] = scores4.asScala

      关于JavaConverters api详情见 http://www.scala-lang.org/api/current/scala/collection/JavaConverters$.html

    元组(Tuple)

    val t = (1, 3.14, "Fred")
    println(t._1)
    var (first, second, third) = t
    (first, second, _) = t
    

      

    拉练操作:

    val symbols = Array("<", "-", ">")
    val counts = Array(2, 10, 2)
    val pairs = symbols.zip(counts)
    for((s,n) <- pairs) print(s * n)
    

      注:代码中的"*"为复写方法,表示将字符串s重复n次

    keys.zip(values).toMap
    

      存在一个键的集合,以及一个与之平行对应的值的集合,那么就可以使用拉练操作将他们组合成一个对偶的集合,再用toMap方法将其转换成映射

  • 相关阅读:
    外包、构件和黑盒抽象等杂想
    C++类型转换小记(一)——C++转换操作符
    大学(一)
    【答】如何获取一个【备份路径】的信息?
    橘色超漂亮滑动二级导航菜单
    CSS自适应宽度按钮
    我们忽略的IE特效——一些特殊效果
    MSSQL 游标示例
    [存]超酷JS拖拽翻页效果
    漂亮的表格
  • 原文地址:https://www.cnblogs.com/PaulingZhou/p/6622152.html
Copyright © 2020-2023  润新知