`

scala学习笔记(五):map

 
阅读更多

     Scala中的映射是键/值对的集合。任何值可以根据它的键进行检索。键是在映射唯一的,但值不一定是唯一的。映射也被称为哈希表。有两种类型的映射,不可变以及可变的。可变和不可变的对象之间的区别在于,当一个对象是不可变的,对象本身不能被改变。

     默认情况下,Scala中使用不可变的映射。如果想使用可变集,必须明确地导入scala.collection.mutable.Map类。如果想在同一个同时使用可变和不可变的映射,那么可以继续参考不可变的映射作为映射,但可以参考可变集合为mutable.Map

1、map的基本操作

 

val map = Map("a"->1,"b"->2)

//映射的值可以是映射甚或是函数
//res14: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Int]] = Map(a -> Map(b -> 4))
var map1 = Map("a" -> Map("b" -> 4))
var map2 = Map(1 -> {operate(1)})

def operate(v:Int):Int = {
    v * 2
}

 2、获取value的值

 

/**
* map 返回的是一个Option
* Option本身是泛型的,并且有两个子类: Some[T] 或 None
* Option 基本的接口
*/
def isEmpty: Boolean //判断Option是否是$none

def isDefined: Boolean = !isEmpty //判断Option是否是$some

def get: A //从Option中获取值

 Some和None源码

 

@SerialVersionUID(1234815782226070388L) // value computed by serialver for 2.11.2, annotation added in 2.11.4
final case class Some[+A](@deprecatedName('x, "2.12.0") value: A) extends Option[A] {
  def isEmpty = false
  def get = value

  @deprecated("Use .value instead.", "2.12.0") def x: A = value
}


/** This case object represents non-existent values.
 *
 *  @author  Martin Odersky
 *  @version 1.0, 16/07/2003
 */
@SerialVersionUID(5066590221178148012L) // value computed by serialver for 2.11.2, annotation added in 2.11.4
case object None extends Option[Nothing] {
  def isEmpty = true
  def get = throw new NoSuchElementException("None.get")
}

 

//Option[Int] = Some(1)
    //Map.get 使用 Option 作为其返回值,表示这个方法也许不会返回你请求的值
    val res = map.get("a")
    //Option[Int] = None
    map.get("c")

    //如果要从map中获取key所对应的值
    if(res.isDefined) operate(res.get) else None

    //上面的代码应该用下面的方式替代
    res.foreach(v => operate(v))

    //getOrElse表示如果没有值就会使用默认值0  建议使用getOrElse或模式匹配处理这个结果
    val value1 = res.getOrElse(0)

    //模式匹配能自然地配合Option使用
    /**
      * 类似 java中的 swith case
      */
    var result = res match {
        case Some(n) => n * 2
        case None => 0
    }

    /**
      * Option类型是一个容器,空(None)或满(Some(value))二选一。它提供了使用null的另一种安全选择,应该尽可能的替代null。
      * 它是一个集合(最多只有一个元素)并用集合操所修饰,尽量用Option
      */
    var username: Option[String] = None
    username = Some("foobar")

    //代替
    //var username: String = null
    //username = "foobar"
    //因为前者更安全:Option类型静态地强制username必须对空(emptyness)做检测

 3、串联映射

val colors1 = Map("red" -> "#FF0000",
      "azure" -> "#F0FFFF",
      "peru" -> "#CD853F")
    val colors2 = Map("blue" -> "#0033FF",
      "yellow" -> "#FFFF00",
      "red" -> "#FF0000")

    // use two or more Maps with ++ as operator
    var colors = colors1 ++ colors2
    println( "colors1 ++ colors2 : " + colors )

    // use two maps with ++ as method
    colors = colors1.++(colors2)
    println( "colors1.++(colors2)) : " + colors )

    //打印映射的键和值
    colors.keys.foreach{ i =>
      print( "Key = " + i )
      println(" Value = " + colors(i) )}

    //使用apply来根据key取值
    /**
      * 其实内部还是使用了get方法 使用模式匹配来获取值
      * 如果不存在会报错:Exception in thread "main" java.util.NoSuchElementException: key not found: green
      * 所以不建议这样根据key来单个取值
      * def apply(key: K): V = get(key) match {
      *   case None => default(key)
      *   case Some(value) => value
      * }
      *
      * def default(key: K): V =
      * throw new NoSuchElementException("key not found: " + key)
      */
    println("single value="+colors("green"))

 

 

 

分享到:
评论

相关推荐

    Scala学习笔记(全)

    ### Scala学习笔记(全) #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...

    scala学习笔记整理

    在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...

    scala学习资料

    - Scala与其他技术的结合:如Spark、Akka等,学习如何在实际项目中应用Scala。 总的来说,Scala是一种强大的工具,它的设计哲学是提供一种既能充分利用面向对象编程的优势,又能发挥函数式编程优点的语言。通过学习...

    scala-learn:scala学习笔记

    本教程“scala-learn:scala学习笔记”旨在帮助初学者深入理解Scala的基础知识,同时也为有经验的程序员提供了一个复习和提升的平台。 1. **基础语法与数据类型** Scala的基础语法简洁而强大,包括变量声明(val和...

    scala学习笔记

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

    scala的操作笔记

    ### Scala的操作笔记 #### 一、课程目标与学习路径 本课程旨在通过三个阶段的目标来逐步深入学习Scala语言,最终能够灵活运用Scala进行Spark程序的开发,并具备阅读Spark内核源码的能力。 - **初级目标**:掌握...

    scala笔记:学习scala时的笔记

    以下是一些在学习Scala时可能会遇到的关键知识点: 1. **基本语法与类型系统**: - Scala是强类型语言,变量声明时必须指定类型,但可以使用类型推断简化编写。 - `val`用于声明不可变变量,`var`用于声明可变...

    Scala-Tutorial:Scala语法学习笔记与程式码范例from 韩顺平老师教学

    Scala是一种多范式的编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种简洁、类型安全且高性能的...通过学习,你可以熟练掌握Scala语言,应用于大数据处理、分布式计算以及构建高并发、高可用的应用系统。

    utility_Scala:Scala编程语言基本和函数式编程(fp)和Spark Scala基本演示| #SE

    -Scala学习注意事项 主要档案 适用于实用程序的Scala脚本 -Scala spark基本演示 Scala基本-变量,数据结构 -Scala基本数据结构: array, list, tuple ,应用function, lambda带有它们的function, lambda基本。 和...

    Scala-notes:小号

    这暗示着这份资料可能来源于一个开源项目,或者是一个组织良好的学习资源,包含按章节或主题划分的Scala学习笔记和练习。 在深入探讨Scala的知识点时,我们可以关注以下几个核心领域: 1. **类型系统**:Scala拥有...

    scala与spark基础

    这个压缩包中的"spark---scala学习"文件很可能是Scala和Spark相关的学习资料,包括笔记、教程或者示例代码,对于初学者来说是一份宝贵的资源。建议仔细阅读和实践其中的内容,以便更好地掌握这两个工具。

    Spark大数据处理学习笔记

    Spark大数据处理学习笔记 本资源 Spark 大数据处理学习笔记对 Spark 大数据处理进行了系统的学习笔记,涵盖了 Spark Standalone 集群的搭建、RDD 的创建和算子、RDD 的分区、RDD 典型案例等多个方面的知识点。 一...

    Scala_day01_scala_

    "Scala_day01_scala_" 的标题暗示了这是一份针对初学者的Scala学习资料,旨在帮助新接触者快速入门。下面,我们将深入探讨Scala的一些核心概念和特性。 首先,Scala的基础语法与Java类似,但它提供了更简洁的表达...

    spark学习笔记

    ### Spark学习笔记 #### Apache Spark简介 Apache Spark是一款专为大规模数据处理而设计的高性能、通用的计算引擎。它的核心特点在于提供了强大的内存计算能力,从而显著提升了数据处理的速度。Spark最初采用Scala...

    快学Scala 第2版.zip

    这本书的中文完整版包含高清扫描和书签功能,使得读者可以轻松查找和学习相关内容,而且文字可选择复制,方便笔记和后续查阅。 Scala在大数据领域扮演着重要角色,主要归功于它与Apache Spark的紧密集成。Spark是一...

    scala_fp_coursera:https的演示

    **Scala FP Coursera课程:深入理解函数式编程** Scala是一种多范式编程语言,...在提供的`scala_fp_coursera-master`压缩包中,可能包含了课程的笔记、代码示例和练习,这些都是深入学习Scala函数式编程的宝贵资源。

    flink学习详细笔记

    【标题】:“Flink学习详细笔记” 【描述】:这篇笔记涵盖了Flink的基础概念,包括数据源读取、数据处理算子,特别是时间窗口和CEP算子的讲解,旨在帮助初学者从零开始踏入数据分析领域。 【标签】:“cep 算子” ...

    scala-with-cats:scala with cats一书的笔记,习题

    Scala是一种强大的、面向对象的编程语言,它集成了函数式编程的特点,被广泛应用于大数据处理、分布式计算...通过学习,你可以掌握如何在Scala项目中有效地利用函数式编程的力量,编写出高效、可维护和类型安全的代码。

    a5源码java-flink-maven-scala:flink技术学习笔记分享

    benv.fromElements(1,2,3).map(i => i * i ).print 输出结果 1 4 9 运行 jar 到 Flink 集群 flink run -c com.opensourceteams.module.bigdata.flink.example.stream.worldcount.nc.SocketWindowWordCount ./flink-...

    spark-scala-tutorial:Apache Spark的免费教程

    本教程“spark-scala-tutorial-master”将涵盖这些基础以及更多进阶主题,例如 Spark SQL、Spark Streaming、MLlib(机器学习库)和 GraphX。通过实践,你将掌握如何在 Scala 中有效地使用 Spark 进行大数据处理,为...

Global site tag (gtag.js) - Google Analytics