zoukankan      html  css  js  c++  java
  • 学习笔记四——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")。其它同理。

  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/liyuchao/p/12256522.html
Copyright © 2011-2022 走看看