今天学习了scala语言的一些基础知识,进行总结。
(1)声明值与变量
变量类型Scala解释器会自动解析,类型写不写都可以。
val变量:声明时必须初始化,之后不可改变(不可重新赋值)。
var变量:声明时可初始化,之后可以改变(重新赋值)。
(2)intersect函数:设A、B都为字符串变量,A.intersect(B)为字符串A与B相同部分。
例:
(3)运算符运算+、-、*、/、>、<
表达式a+b等价于表达式(a).+(b);
表达式a-b 等价于表达式(a).-(b);
a>b、a<b返回值为表达式真假(true或false);
(4)多行输入统一运行方法:输入“:paste”进入多行输入模式,按键“Ctrl+D”退出多行输入模式。例如:
(5)读写文件
写入文件:
1 import java.io.PrintWriter; 2 val out = new PrintWrinter("output.txt")//output.txt为文件名,默认新建文档保存到进入spark前所处目录下。 3 //val out = new PrintWriter("path/output.txt")//path为指定路径,表示写入指定目录下的output.txt文档。 4 for(i <- 1 to 5)out.println(i) 5 out.close();//关闭输入流才可以查看到
读取文件:
1 import scala.io.Source 2 val inputFile = Source.fromFile("output.txt")//建立输出流 3 val lines = inputFile.getLines//返回结果 4 for(line <- lines)println(line)//输出
(6)需要注意的是,在Scala中,对数组元素的应用,是使用圆括号,而不是方括号,也就是使用intValueArr(0),而不是intValueArr[0],这个和Java是不同的。
1 val myStrArr = new Array[String](3) //声明一个长度为3的字符串数组,每个数组元素初始化为null 2 myStrArr(0) = "BigData" 3 myStrArr(1) = "Hadoop" 4 myStrArr(2) = "Spark"
(7)列表的使用
注:列表中各个元素必须为同一类型(但是在我的尝试中发现定义一个列表时,内部元素可以为不同类型,我在网上也没有找到答案)
①声明列表:
1 var list1 = List(1,2,3)
2 var list2 = 1::2::3::Nil
②使用list.head来获取上面定义的列表的头部,list.tail获取列表的尾部。
③使用“::”在列表头部前添加新头部,如:0::list
④使用“:::”连接两个列表,如:list1:::list2
⑤使用list.sum可以求列表内数据的和(字符、字符串不可用)
示例:
(8)元组的使用
注:元组内部各个元素可以为不同类型
定义与列表定义相同,但是可以存储不同类型元素。不可以使用“::”或“:::”
获取元组的某一元素格式为:“变量名._元素下标”(元素下标从1开始)
(9)映射的使用
映射(Map)是一系列键值对的集合,也就是,建立了键和值之间的对应关系。在映射中,所有的值,都可以通过键来获取。
映射默认为不可变,如果需要创建可变映射,需要引入scala.collection.mutable.Map包。
格式:
var map1 = Map("1" -> "a","2" -> "b","3" -> "c")
获取值使用:
print(map1("1"))
例如:
总结
今天学习了一些scala的基础语法知识,scala语言与java语言有很多共同之处,还是很容易的。但是在学习过程中也遇到了一些令人烦恼的问题。
列表List、元组tuple、集Set、映射Map
列表与元组声明后是不可变的,集与映射默认是不可变的,但是可以通过引入包而变得可变,但是在学习过程中我发现通过var定义的这些列表变量、元组变量、集变量、映射变量都是可变的(不会报错),经过网上搜索后,发现了其中的问题。变量的声明var与val其实是指针。就拿集来说,声明一个集,不导入包,本身应是不可变的,但是却增加了:
var mySet = Set(
"Hello"
,
"World"
);
mySet +=
"Scala"
;
使用val的时候
valmySet = Set(
"Hello"
,
"World"
);
mySet +=
"Scala"
其实,使用var的时候,不可变的集mySet本身没有变,只是var由一开始的指向Set("Hello","World")变为了指向Set("Hello","World","Scala")。其它同理。