《快学Scala》——数组、映射和元组
来源:互联网 发布:网络视听制作许可证 编辑:程序博客网 时间:2024/06/05 10:45
数组
- 定长数组:在Scala中可以用Array,初始化一个定长数组。例如:
val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0val a = new Array[String](10) //10个元素的字符串数组,所有元素初始化为nullval s = Array("Hello", "Scala") //长度为2的字符串数组s(0) = "Hi" //使用()来访问数组中的元素,使得s变成Array("Hi","Scala")
注:已提供初始值就不需要使用new
。
在JVM中,Scala的Array
以Java数组方式实现,如字符串数组对应java.lang.String[]
,Int
、Double
等基本数据类型对应Java中都是基本数据类型数组,如Array(2,3,4)
在JVM中就是一个int[]
。
变长数组(数组缓冲):Scala中使用
ArrayBuffer
来实现。使用前需要引入包import scala.collection.mutable.ArrayBuffer
。
1.用+=
在尾部添加元素。
2.用+=
在尾部添加多个元素,用括号包起来。
3.用++=
追加任何元素。
4.移除尾部的三个元素。
insert
可以在任意位置插入元素。remove
可以在任意位置删除元素。缺点是:这样做需要移动后面的元素。
变长数组可以和定长数组之间相互转换,通过使用toArray
和toBuffer
。转换:在Scala中,可以用某种方式对一个数组(或数组缓存)进行转换,这种操作不会修改原数组,而是产生新的数组。如下:
for(…) yield循环创建了一个类型与原始集合相同的集合。遍历:使用for循环遍历数组或数组缓冲。如下:
for (i <- 0 until a.length) println(i + ": " + a(i))
until
:返回所有小于上限的数字。
也可以使用如下方法:
for (elem <- a) println(elem)
- 多维数组:Scala中多维数组是通过数组的数组实现的。如:
Array[Array[Int]]
,也可以使用ofDim方法。如下:
第一个是生成10行的二维数组,但列数不确定。
第二个是生成3*4的二维数组。
在Scala API文档中还有许多关于数组的函数,比如sum
、max
、min
等。这里介绍一个mkString
和toString
。
当需要显示数组或者数组缓冲就可以使用mkString
方法,这个方法还可以指定元素之间的分割符。如下:
而对于toString
方法,Array
只会生成没意义的地址码。ArrayBuffer
会被完全转化成String
。如下:
映射
- 构造映射:
构造**不可变映射**Map[String,Int],其中的值不能被改变:
val scores1 = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)val scores2 = Map(("Alice", 10), ("Bob", 3), ("Cindy", 8))
构造可变映射:
val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
构建一个空映射:
val scores = scala.collection.mutable.HashMap[String, Int]
在Scala中映射是 对偶 的集合,就是用两个值构成一个组。
- 获取映射值:
使用()
来获取某个键对应的值。如:
val bobscore = scores("Bob")
若映射中不包含这个键,将会抛出异常。Scala中可以使用 contains
方法判断映射中是否包含某个键。为了防止抛出异常也可以这么做:
val bobscore = scores.getOrElse("Bob", 0) //如果没有Bob这个键就返回0
- 更新映射值:
在可变映射中可以更新映射的值或者添加新的映射关系,做法是在=
的左侧使用()
,如下:
scores("Bob") = 10 //更新Bob的值scores("xiaoming") = 5 //添加新的键值对
也可以使用+=
来增加多个键值对(如果有相同的键则更新对应的值),用-=
来移除某个键值对。如下:
对于不可变映射,可以使用如下方法对映射进行更新和删除,更新后会生成一个新映射。
val newScores = scores + ("Bob" -> 10, "Freb" -> 7) //更新val newScores = scores - ("Bob" -> 10) //删除
- 迭代:
for((k, v) <- 映射) 处理k和v
如果只需要访问键或值,则可以用keySet
和values
方法。values
方法返回一个Iterable
,这样就可以在for循环中使用这个’Iterable’。如下:
scores.keySet //生成一个类似Set("Bob","Cindy","Fred")这样的集合for(v <- scores.values) println(v) //将打印value值
元组
映射是键值对偶的集合,对偶是元组(tuple)的最简单的形态。元组是不同类型的值的聚集。元组的值是通过将单个的值包括在圆括号中构成。元组的初始化、读取元素和模式匹配的操作如下:
注:其中t._2
用来读取元组中的第二个元素。(f,s,_)
中的_
表示这个位置的元素不需要。
- 《快学Scala》——数组、映射和元组
- 快学Scala习题解答—第四章 映射和元组
- 快学Scala习题解答—第四章 映射和元组
- 快学Scala习题解答—第四章 映射和元组
- 快学Scala第4章--映射和元组
- 快学Scala(4) 映射和元组
- 快学Scala学习笔记及习题解答(1-4基础、控制、函数、数组、元组和映射)
- 快学Scala-数组、映射
- 《快学Scala》第4章 映射和元组 练习
- 《快学Scala》习题详解 第4章 映射和元组
- scala------数组映射和元组
- 快学Scala 读书笔记之 Chapter 2、3、4(控制结构函数,数组,映射,元组)
- Scala学习——数组/映射/元组
- 学习Scala——映射和元组
- scala的数组、映射、元组和集合
- Scala映射和元组
- Scala 映射和元组
- Scala映射和元组
- 一次涉及到物化视图的DB2 Insert性能问题的诊断
- Andorid即时获取电池信息(转载)
- java RSA/DSA/ECDSA实现数字签名
- 微信小程序开发总结
- gitlab配置邮件
- 《快学Scala》——数组、映射和元组
- elasticsearch+metricbeat+kibana安装配置
- Android-刷新之三:android-Ultra-Pull-To-Refresh
- linux top命令详解
- Android Studio 编写Jni
- Maven 项目如何打 war 包
- HTTPClient4.5.2学习笔记(二):连接管理(Connection management)
- 征信路漫漫 ,“类”金控平台的征信现状、实例
- 将kinect for windows SDK v2.0中代码在VS2015中打开运行报错 The build tools for Visual Studio 2012 (Platform Tools