`

Scala Map(映射)学习

 
阅读更多
Map(映射)是一种可迭代的键值对(key/value)结构。
所有的值都可以通过键来获取。
Map 中的键都是唯一的。
Map 也叫哈希表(Hash tables)。
Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。
默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类
在 Scala 中 你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map。以下实例演示了不可变 Map 的应用:

// 空哈希表,键为字符串,值为整型
var A:Map[Char,Int] = Map()

// Map 键值对演示
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")


定义 Map 时,需要为键值对定义类型。如果需要添加 key-value 对,可以使用 + 号,如下所示:
A += ('I' -> 1)
A += ('J' -> 5)
A += ('K' -> 10)
A += ('L' -> 100)


Map 基本操作
Scala Map 有三个基本操作:

keys 返回 Map 所有的键(key)
values 返回 Map 所有的值(value)
isEmpty 在 Map 为空时返回true

实例
以下实例演示了以上三个方法的基本应用:

object Test {
   def main(args: Array[String]) {
      val colors = Map("red" -> "#FF0000",
                       "azure" -> "#F0FFFF",
                       "peru" -> "#CD853F")

      val nums: Map[Int, Int] = Map()

      println( "colors 中的键为 : " + colors.keys )
      println( "colors 中的值为 : " + colors.values )
      println( "检测 colors 是否为空 : " + colors.isEmpty )
      println( "检测 nums 是否为空 : " + nums.isEmpty )
   }
}


执行以上代码,输出结果为:

$ scalac Test.scala 
$ scala Test
colors 中的键为 : Set(red, azure, peru)
colors 中的值为 : MapLike(#FF0000, #F0FFFF, #CD853F)
检测 colors 是否为空 : false
检测 nums 是否为空 : true


Map 合并
你可以使用 ++ 运算符或 Map.++() 方法来连接两个 Map,Map 合并时会移除重复的 key。以下演示了两个 Map 合并的实例:

object Test {
   def main(args: Array[String]) {
      val colors1 = Map("red" -> "#FF0000",
                        "azure" -> "#F0FFFF",
                        "peru" -> "#CD853F")
      val colors2 = Map("blue" -> "#0033FF",
                        "yellow" -> "#FFFF00",
                        "red" -> "#FF0000")

      //  ++ 作为运算符
      var colors = colors1 ++ colors2
      println( "colors1 ++ colors2 : " + colors )

      //  ++ 作为方法
      colors = colors1.++(colors2)
      println( "colors1.++(colors2)) : " + colors )

   }
}


执行以上代码,输出结果为:
$ scalac Test.scala 
$ scala Test
colors1 ++ colors2 : Map(blue -> #0033FF, azure -> #F0FFFF, peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)
colors1.++(colors2)) : Map(blue -> #0033FF, azure -> #F0FFFF, peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)


输出 Map 的 keys 和 values
以下通过 foreach 循环输出 Map 中的 keys 和 values:
object Test {
   def main(args: Array[String]) {
      val sites = Map("runoob" -> "http://www.runoob.com",
                       "baidu" -> "http://www.baidu.com",
                       "taobao" -> "http://www.taobao.com")

      sites.keys.foreach{ i =>  
                           print( "Key = " + i )
                           println(" Value = " + sites(i) )}
   }
}

执行以上代码,输出结果为:
$ scalac Test.scala 
$ scala Test
Key = runoob Value = http://www.runoob.com
Key = baidu Value = http://www.baidu.com
Key = taobao Value = http://www.taobao.com


查看 Map 中是否存在指定的 Key
你可以使用 Map.contains 方法来查看 Map 中是否存在指定的 Key。实例如下:
object Test {
   def main(args: Array[String]) {
      val sites = Map("runoob" -> "http://www.runoob.com",
                       "baidu" -> "http://www.baidu.com",
                       "taobao" -> "http://www.taobao.com")

      if( sites.contains( "runoob" )){
           println("runoob 键存在,对应的值为 :"  + sites("runoob"))
      }else{
           println("runoob 键不存在")
      }
      if( sites.contains( "baidu" )){
           println("baidu 键存在,对应的值为 :"  + sites("baidu"))
      }else{
           println("baidu 键不存在")
      }
      if( sites.contains( "google" )){
           println("google 键存在,对应的值为 :"  + sites("google"))
      }else{
           println("google 键不存在")
      }
   }
}

执行以上代码,输出结果为:
$ scalac Test.scala 
$ scala Test
runoob 键存在,对应的值为 :http://www.runoob.com
baidu 键存在,对应的值为 :http://www.baidu.com
google 键不存在


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    最好的scala学习 课件

    这部分会讲解如何使用List、Set、Map等集合,以及如何进行集合操作,如映射、过滤、折叠等。此外,还会涉及Option和Either等类型,它们是处理可能的null值和错误的良好工具。 接着,"Scala进阶之路-part03-面向对象...

    Scala学习笔记(全)

    - **映射(Map)**:存储键值对,支持增删改查操作。 - **元组(Tuple)**:一组有序的数据集合,每个位置的数据类型可以不同。 - **集合**:包括List、Set等多种类型,支持丰富的操作。 #### 四、总结 Scala不仅具备...

    头歌Scala中集合的使用

    Scala中集合的使用 大学生 1. List 列表的使用 2. Set 集合的使用 3.Map 映射的使用 4. 元组的使用

    scala + mybatis 数据库查询

    - XML映射文件通常包含SQL查询、参数映射和结果集映射,它们定义了MyBatis如何执行查询并将结果转换为Scala对象。 4. **Scala中的SQL查询** - 使用Scala版MyBatis,我们可以通过调用Mapper接口的方法执行SQL查询...

    Scala 【 5 数组常见操作和 Map 】

    在 Scala 中,数组和 Map 是两种非常常用的数据结构。数组用于存储同类型的固定大小的数据集合,而 Map 则用于存储键值对。接下来,我们将详细探讨数组的常见操作以及 Map 的使用方法。 **数组操作** 1. **创建...

    浅析scala中map与flatMap的区别

    Scala 中 map 与 flatMap 的区别 在 Scala 中,map 和 flatMap 是两个非常重要的函数,它们都是函数式编程中的核心概念。虽然它们都可以将一个函数应用于集合中的每个元素,但是它们之间存在着很大的区别。 首先,...

    Scala-part2集合框架

    - **不可变映射**:位于`scala.collection.immutable`包中,使用`Map`构造函数创建。 - 例如,`val map1 = Map("a" -> 1, "b" -> 2);` - **可变映射**:位于`scala.collection.mutable`包中,使用`mutable.Map`创建...

    scala编程入门教材

    4. **集合框架**:Scala的集合库非常强大,包含了列表、数组、映射(Map)、集(Set)等多种数据结构。它们支持函数式编程操作,如map、filter、fold等。 5. **模式匹配**:Scala的模式匹配允许对值进行解构,用于...

    Scala学习第一天(十五):函数式编程(foreach遍历/map映射/flatMap扁平化映射/filter过滤/sort排序/groupBy分组/reduce聚合/fold折叠)

    学习目标遍历(foreach)使用类型推断简化函数定义使用下划线来简化函数定义映射(map)扁平化映射(flatMap)过滤(filter)排序(sort)默认排序 | sorted指定字段排序 | sortBy自定义排序 | sortWith分组(group...

    scala语言pdf_带目录标签

    读者可以学习到如何使用映射(map)、过滤(filter)、折叠(fold)等函数,以及如何自定义集合操作。 总的来说,这四本书籍构建了一个完整的Scala学习体系,从基础知识到高级特性的实践,再到特定领域如函数式编程...

    scala入门教程pdf

    5. **集合库**:Scala的集合库非常强大,包含各种序列、映射和集合操作,如map、filter、fold等,支持懒评估和并行操作。 6. **类型系统**:Scala的类型系统允许隐式转换和类型推断,有助于编写简洁的代码。 7. **...

    Scala高级语言设计

    数据结构章节介绍了Scala的集合类型,包括数组、元组、列表、队列、映射(Map)、和Set集合。集合操作部分进一步讲解了如何进行映射操作、扁平化映射以及过滤集合等高级操作。 总之,Scala高级语言设计的知识体系是...

    programming in Scala_ch

    - **集合(Set)和映射(Map)**: 掌握Scala中用于存储和检索元素的集合框架。 - **函数式风格**: 了解如何运用函数式编程的技巧来编写更简洁、高效的代码。 #### 类和对象 - **类、字段和方法**: 在Scala中定义类的...

    Scala的List类方法整合

    ### Scala的List类方法整合 在Scala编程语言中,`List` 类是处理有序集合的一种常见方式。本文将详细介绍 `List` 类中的多种方法及其用途,帮助开发者更好地理解和使用这些功能。 #### 1. `def + (elem: A): List...

    A Brief Introduction to Scala

    Scala和Java之间的类型映射对于实现互操作性至关重要。例如,在Scala中,`String`类型对应Java中的`java.lang.String`;而在Java中,`int`类型对应Scala中的`Int`类型。 通过以上介绍可以看出,Scala不仅在理论上...

    scala-2.10.7版本源码

    5. 集合框架:Scala的集合库是其强大功能的一部分,包括Seq、Set、Map等类型。源码揭示了这些集合如何实现高效操作,如转换、过滤和映射。 6.模式匹配:Scala的模式匹配功能是其语法的一大亮点,用于解构复杂数据...

    scala的操作笔记

    - **映射**:Scala中的映射(Map)是一种键值对的集合。可以使用键来获取对应的值。 - **元组**:元组是一种固定大小的数据结构,用于组合多个值。每个位置的值都有特定的类型。 - **集合**:Scala中的集合框架包括了...

    使用scala实现的maze主类

    初始化maze游戏场景,使用java的JFrame实现可视化,以4x4九宫格作为游戏背景

    Scala Cookbook

    在《Scala Cookbook》中,读者可以期待学习到以下关键知识点: 1. **基础语法**:涵盖Scala的基本数据类型(如Int, Double, String等)、变量声明、操作符、流程控制语句(如if-else, for循环)以及函数定义。 2. ...

    scala学习笔记

    - **集合框架**:Scala 提供了强大的集合框架,包括不可变集合(如 `Set` 和 `Map`)和可变集合(如 `ArrayBuffer`)。 ### 5. 类与对象 - **类与对象定义**:Scala 支持面向对象编程,可以定义类和对象,并实现...

Global site tag (gtag.js) - Google Analytics