scala 基础六 scala Map和元组的操作

1.Map的介绍

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

2.Map 的分类和定义

    //不可变Map    var m1=Map("james"->20,"luce"->22);        //可变Map    var m2=scala.collection.mutable.Map("james"->20,"luce"->22);        //指定泛型,如果不指定scala会根据类型自动判断    var m3=scala.collection.mutable.Map[String,Int]();

 3.不可变Map的使用

    //根据Key获取value 如果key不存在的话会抛出异常
    m1("james");

    //等同于m1("james") 如果key不存在的话会 返回None
    m1.get("james");

    //给key 设置一个默认值,如果key 不存在就设置为20 不至于抛出异常
    m1.getOrElse("tom", 20)

    //获取所有的key
    m1.keys 

    //获取所有的value
    m1.values

 4.可变Map的操作

  //可变Map
    var m2=scala.collection.mutable.Map("james"->20,"luce"->22);

    //产生一个新的对象,不会动态增加
    m2+("lili"->18)

    //不产生新对象直接在m2 中增加对象
    m2+=("lili"->18);

 5.遍历集合

遍历所有的key 和value  格式for((k,v)<-x){....}

      //可变Map
    var m2=scala.collection.mutable.Map("james"->20,"luce"->22);
    //遍历Key 和Value
    for((k,v)<-m2){println("key is"+k+" value is"+v)}

    result:

    key isjames value is20
    key isluce value is22
    key islili value is18

单独的遍历Key 或者value   for((k,_)<-x){}  for((_,v)<-x){}

    //只遍历所有的key value 省略
    for((k,_)<-m2) println("key is "+k)

    //只遍历所有的value key省略
    for((_,v)<-m2) println("value is"+v)

    result:
    key is james
    key is luce
    key is lili
    value is20
    value is22
    value is18

 6.元组的介绍和使用

与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素。

val t = (1, 3.14, "Fred")

以上实例在元组中定义了三个元素,对应的类型分别为[Int, Double, java.lang.String]。

元组 通过 ._ 取值, 下标从1 开始,比如 t._1 将获取1 这点和数组不同,数组的下标是从0开始的

val t = (4,3,2,1)

val sum = t._1 + t._2 + t._3 + t._4

println( "元素之和为: "  + sum )  

result:
$ scalac Test.scala
$ scala Test
元素之和为: 10

元组的迭代

你可以使用 Tuple.productIterator() 方法来迭代输出元组的所有元素:

  //通过 productIterator 迭代元组
    for(x<-t.productIterator) println(x)
时间: 2024-11-08 22:11:14

scala 基础六 scala Map和元组的操作的相关文章

Scala学习(六)---Scala对象

Scala中的对象 摘要: 在本篇中,你将会学到何时使用Scala的object语法结构.在你需要某个类的单个实例时,或者想为其他值或函数找一个可以挂靠的地方时,你就会用到它.本篇的要点包括: 1. 用对象作为单例或存放工具方法 2. 类可以拥有—个同名的伴生对象 3. 对象可以扩展类或特质 4. 对象的apply方法通常用来构造伴生类的新实例 5. 如果不想显式定义main方法,可以用扩展App特质的对象 6. 你可以通过扩展Enumeration对象来实现枚举 单例对象 Scala没有静态方

scala 基础四 scala 的函数扩展 默认参数,不定长参数,带名参数

默认参数,默认参数就是在函数定义的时候直接给函数的入参进行赋值 package smart.iot class func { } object func { //参数默认值 格式 参数:参数类型="要设置的默认值" def funcadd(str:String="hello scala!") { println(str); } def main(args: Array[String]): Unit = { funcadd() } } 输出:hello scala!

scala 基础三 scala 静态方法的实现

.scala没有静态的修饰符,但object下的成员都是静态的 ,若有同名的class,这其作为它的伴生类.在object中一般可以为伴生类做一些初始化等操作 1 package smart.iot 2 3 4 class ScalaStatic { 5 6 } 7 8 object statictest 9 { 10 def add(x:Int,y:Int):Int={x+y} 11 //以上的函数也可以写成下面的格式,省略掉花括号,返回值是scala自动推断出来的 12 //def add(

scala 基础九 scala 类的扩展和继承extends override

1.scala 类的继承 package smart.iot //父类 animal 有三个参数 class animal(var name:String,var age:Int,var eat:String) { } //子类 panda 继承父类 animal class Panda( name:String, age:Int, eat:String,var blackeye:String) extends animal(name,age,eat) { } object load { def

scala 高级十六 scala 集合和集合的高级特性 map flatten fllatmap zip reduce zip 等操作

1. scala 的列表List 和集Set 的操作 //Set 和list 差不多,不过 Set 中不允许有重复的元素   var set=scala.collection.mutable.Set[Int]();        //+ 会产生一个新的对象,而不是在set 中动态增加    set.+(1)    //+= 会在原先的set 中动态的增加元素而不是产生一个新的对象.    set.+=(1,2,3)        //这个会输出一个排序以后的 集合 比如 输入 7,4,8,6,1

第一章 Scala基础篇

目录 一.Scala基础语法 (一) 变量.类型.操作符 1.变量申明 2.字符串 3.数据类型 4.操作符 (二)循环判断 1.块表达式 2.条件表达式 3.循环表达式 (三)方法和函数 1.方法 2.函数 3.方法和函数的区别 4.总结 二.Scala常用数据结构/集合 (一)Scala集合分类和继承体系 1.分类 2.继承体系 (二)数组 (三)元组 (四)List (五)队列 (六)Set (七)Map 一.Scala基础语法 === (一) 变量.类型.操作符 1.变量申明 ●Java

Scala学习(1)——Scala基础知识

本文要解决的问题: Spark主要是由Scala语言编写而成的,所以要真正深入了解Spark,必须要熟悉Scala,在此结合阅读<Scala编程>这本书的情况,对Scala语言做一个基本的总结. Scala的优势 (1)简洁 类型推断 函数创建的文法支持 (2)Java互操作性 可重用Java库 可重用Java工具 没有性能惩罚 Scala工作机制 编译成Java字节码 可在任何标准JVM上运行,甚至是一些不规范的JVM上 Scala编译器是Java编译器的作者写的 启动解释器 输入Scala

Scala 基础入门【翻译】

原文地址 本文只是带你进入 Scala 的世界,包括安装.不可变变量 val.可变变量 var.定义类.集合(包括列表(list).集(set).映射(map))以及集合遍历和集合库(能达到并行/并发效果). 题外话,如果 Java 争气的话,还就真不会出现像 Scala 这些语言.对于函数编程风格的支持,尤其是对于 Lambda 表达式的支持,能够有助于减少必须要编写的逻辑无关样板代码,也许让它可以更简单的关注要面对的任务本身.而 Java 对 Lamdba 表达式的支持到 JavaSE8 才

scala 基础语法

文章内容全部来自:http://twitter.github.io/scala_school/zh_cn/index.html 表达式 scala> 1 + 1 res0: Int = 2 值 你可以给一个表达式的结果起个名字赋成一个不变量(val). scala> val two = 1 + 1 two: Int = 2 变量 如果你需要修改这个名称和结果的绑定,可以选择使用var. scala> var name = "steve" name: java.lang