• 学习笔记四——scala基础学习


      今天学习了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的时候

    val mySet = Set("Hello","World");
    mySet += "Scala"

       

       其实,使用var的时候,不可变的集mySet本身没有变,只是var由一开始的指向Set("Hello","World")变为了指向Set("Hello","World","Scala")。其它同理。

  • 相关阅读:
    第三方中间件 body-parser解析表单数据
    Express内置的中间件(express.json和express.urlencoded)格式的请求体数据
    用内置 querystring 模块解析请求体数据
    1108 低价购买
    1091 合唱队形
    1064 金明的预算方案
    1048 采药 & 1049 装箱问题
    1434 滑雪
    1443 马的遍历
    1141 01迷宫
  • 原文地址:https://www.cnblogs.com/liyuchao/p/12256522.html
Copyright © 2020-2023  润新知