前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala语言学习笔记二

Scala语言学习笔记二

作者头像
刀刀老高
发布2018-04-11 10:41:00
7040
发布2018-04-11 10:41:00
举报
文章被收录于专栏:奇点大数据

在开始今天的内容前,先回复下在上一篇笔记的热心读者的问题:

1 既然是读书笔记,是读的哪本书?

这本书的名字叫《快学scala》,虽然是本比较久远的书,但是也算是scala入门非常经典的读物,主要是对比java和scala的语言特点写出来的,我早期做了这样一套读书笔记,由于工作的需要,要重新使用scala,而且Scala的版本也有了较大变化,这里就当做温故知新,贴出来也算是抛砖引玉,希望Spark高手能给大家带来精彩的Spark源代码解析。

2 为什么笔记的内容和原书的解释不一样?

读书笔记,在读的过程中肯定会有自己的理解,另外scala的版本也有较大改动,自然就会有出入。而且一些新的特性肯定要以新的版本为准。而且这是第二遍读这本书,也是根据原来的笔记内容做整理,难免会和书上的描述不一样。

3 这个笔记会连载多少期?

看大家对scala和spark的程度,但是至少会连载到这个读书笔记完成,第一篇内容篇幅较短,主要想了解大家对scala的热情。如果大家需要,后面会继续连载spark的源代码分析。

下面我们开始正式的内容:

3 数组

3.1 定长数组

scala的数组分成定长和变长数组,先看如何生成新的定长10个Int数组

scala> val nums = new Array[Int](10)

生成10个元素的字符串数组

scala> val strs = new Array[String(10)

//初始化为null

3.2 变长数组

变长数组和Java的ArrayList是等效的,定义的方法如下:

scala> import scala.collection.mutable.ArrayBuffer

scala> val ab = ArrayBuffer[Int]()

scala> ab += ( 1, 2, 3 )

//在末尾添加多个元素

//ArrayBuffer(1, 2, 3)

也可以对数组做插入和移除操作,但是并不高效,因为后面的元素会进行平移,使用的命令如下

scala> ab.insert(2, 6)

//在下标2之前插入,下标以0开始

scala> ab.remove(2, 4)

//在下标2开始,移除4个元素

定长数组和变长数组(数组缓冲)之间是可以转换的

scala> ab.toArray

scala> ab.toBuffer

3.3 遍历数组

scala> for ( i <- 0 util a.length)

| println( i + ": “ + a(i))

这里注意 0 util 10 实际上是一个方法的调用: 0.util(10),如果不需要使用数组下标也可以用这样的方法:

scala> for ( klem <- a )

| println(elem)

来一些更高级的用法,过滤部分元素

scala> for ( klem <- a if elem % 2 == 0 ) yield 2 * elem

3.4 对数组的常用运算

求和与排序—最常用的两个运算

scala> Array(1, 6, 4, 3).sum

排序需要说哪一个sorted()方法

val ab = ArrayBuffer(1, 7, 2, 9)

val abSorted = ab.sorted(_ < _ )

//ab是常量不变,abSorted是ArrayBuffer(1, 2, 7, 9)

scala还能支持多维数组,还有很多的数组操作方法,详见官方文档

http://www.scala-lang.org/api/2.11.8/#scala.Array

4 映射

4.1 映射(Map)是非常灵活的数据结构,简单说就是key/value对的一组集合。映射也可以构建出可变和不可变映射两类。构建一个不可变的映射:

scala> val scores = Map(“Alice” -> 10, “Bob” -> 20, “Cindy” -> 30)

构建一个可变映射方法如下:

scala> val scores = scala.collenction.mutable.Map(“Alice” -> 10, “Bob” -> 20, “Cindy” -> 30)

也可以先构建一个空格的映射开始,但是必须指定类型参数

scala> val scores = scala.collenction.mutable.HashMap[String, Int]

4.2 映射赋值

映射赋值和增加新的映射关系操作相同

scala> scores(“Bob”) = 10

或者使用 += 操作,同样的也可以使用-=移除某个键值对。

scala> scores -= “Alice"

这里要注意的是不能更新一个不可变的映射,但是可以将操作结果传给新的映射。

还可以反转映射,即key/value互换

scala> for( (k, v) <- 映射) yield(v, k)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档