`
wbj0110
  • 浏览: 1603174 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Scala学习笔记之Scala标准库

阅读更多

IO

  1.打开Source.fromFile(filename,encoding)

  2.关闭source.close

  3.获取所有行,getLines

  4.迭代行用source.getLines

  5.迭代字符用source

  5.buffered不移动文件指针但是可以读取字符

  @注意文件读取有一个文件的指针,如果文件都到结尾就不能在读到文件了。

隐式转换

定义

隐式转换:是编译器在发生类型不匹配时自动插入的用户自定义的转换函数

语法

1.隐式转换是一个函数,由关键字implicit

implicit def intToString(x: Int) = x.toString

2.命名规则

如果是转换类型

int2Integer

intToInteger

如果是包装

intWrapper

使用

使用已有的类型

转换对象已接受特定类型方法

implicit def stringWrapper(s: String):IndexedSeq[Char] = ...

abc.exists()//string 没有exist方法,但是IndexedSeq有,因此要用隐式转换。

得到的结果如下

stringWrapper("abc").exists()

1.可以把一个简单的类型转换为它的包装类型,这样简单的类可以是丰富的方法,使用完之后又可以转化回来

例如scala中的richInt,RichBoolean以及String和StringOps

Map的魔法

Map中使用的->是一个类,定义在Predef中

package scala

object Predef {

class ArrowAssoc[A](x: A) {

    def ->[B](y: B): Tuple2[A, B] = Tuple2(x, y)

}

implicit def any2ArrowAssoc[A](x: A): ArrowAssoc[A] =new ArrowAssoc(x)

...

}

每次写a->b时,scala都会把a转换为ArrowAssoc,然会调用->方法,得到的结果是一个元祖

隐式参数

Scala集合

数组

var a = Array[int](10)

var s = Array("hello","World")

for yeild 创建一个Array,注意直接使用for不可以

引用元素时用圆括号,事实上由于Array是一个类,因此圆括号表示一个方法,事实上调用的是类中的apply方法

  #多维数组

  var s = Array[Double](10,10)

  var s = Array[Array[Int]](10),注意这儿的第二维没有固定长度,可以在下面赋值

列表

ArrayBuffer

ArrayBuffer用数组实现列表

  var s = new ArrayBuffer[int](10);

  s+=1

  s.toArray

  s.toArray.toBuffer

List

List使用链表来实现队列,在Java中相当于LinkedList

另一种创建方法:val oneTwoThree = 1 :: 2 :: 3 :: Nil

这儿需要Nil的原因是Nil表示空队列,而::定义在队列上,故如果不用3,scala就不知道::是什么的方法

方法

:::

连接两个列表

::

把一个元素添加到列表头,注意他的调用方法,1::List(1,2,3,4)

count

接受一个单参数布尔函数,计算返回值为true的元素

 

drop

从头开始丢弃元素

dropRight

从后面开始丢弃元素

exists

检测符合某个条件的元素是否存在

 

forAll

检测是否所有的列表元素都满足一个条件

 

head

获取头元素

 

tail

得到除头元素以外的所有元素

last

最后一个元素

length

长度

sort

flatmap

使用map可能会产生一个有列表组成的列表,flatMap会把它门重新变成一个列表

partion

partion会把列表中false和true的元素分成两个列表。

scala> List(1, 2, 3, 4, 5) partition (_ % 2 == 0)

res42: (List[Int], List[Int]) = (List(2, 4),List(1, 3, 5))

Nil

Nil表示空队列,和list.isempty相同

空列表

空列表的类型是List[Nothing]

res:ListNothing == List() == Nil

模式匹配

val List(a, b, c) = fruit

val a :: b :: rest = fruit

//其中reset还是一个,列表

语法糖

1.在scala中以冒号结束的操作符调用时要反序

 

元组

在scala中,元祖中可以存储不同类型的对象,且大小不可变,注意从1开始

  声明:(1,"sksk",10.3)

  引用:tuple._2,tuple._1,

  最有用的地方是函数返回多个值

     var (first,second,third) = tuple

使用不同的方法来访问元组中不同的元素的原因是:元组的类型不同。

集合

 

通用规则

  1.不可变的集合在scala.collection.immutable,可变的集合在scala.collection.mutable中

  2.三种数据类型都是iteratable的子类,这意味着所有的集合类型都可以用在for迭代

  3.所有的集合类型都实现了apply和update方法,因此可以不加new创建以及使用()引用元素

  4.Range和Python中的Range类似

  5.对集合使用view方法可以得到一个懒运算的集合,这意味着对集合的运算都是在元素在引用时才得到的,而其他的方法都是一次得到一个集合。

  6.scala提供了线程安全的特质,在构造常规集合时混入即可

  7.使用par方法可以得到一个并行化的集合,对于这个集合的操作都是分块执行的,因此可以并行执行

  @注意不能改变并行计算时的元素

   8.集合都可以使用模板

   9.在集合定义中如果在定义的时候传递了一些初始数据,那么就不用在写明他的类型。但是如果没有那么就要写明类型。

映射

 

例子

import scala.collection.mutable.Map

val treasureMap = Map[Int, String]()

treasureMap += (1 ->"Go to island.")

treasureMap += (2 ->"Find big X on ground.")

treasureMap += (3 ->"Dig.")

println(treasureMap(2))

   1.不可变:

      var score = Map("Alice"->10,"Bob"->12)

   2.可变

      var scores = scala.collection.mutable.Map("Aclic"->10...)

      var scores = new scala.collection.mutable.HashMap[String,Int];//可以用其他Map,如SortedMap

      引用同Python

      更新同Python,不过还有另一种方法,即+=和-=

         score += ("Aclice"->10)

         score -= "Aclice"

   3.迭代

      for((k,v)<-map)

      或使用keyset和values分别引用

XML

表示

Actor

注意

变与不变

scala中的val声明的是不变的引用并不是对象不变,因此要使用不变的类而不是引用。

http://blog.csdn.net/ssjssh/article/details/12126685

分享到:
评论

相关推荐

    scala的操作笔记

    由于Scala运行在Java虚拟机(JVM)之上,因此它可以无缝地与现有的Java代码和库进行交互。 ##### 2.2 为什么要学Scala - **优雅的API设计**:Scala语言支持函数式编程特性,这使得开发者可以写出更加简洁、易于理解...

    DALC_Scala

    10. **最佳实践**:学习者会接触到 Scala 编程的最佳实践,如类型安全、代码复用、类型推断和使用 Scala 的标准库。 总的来说,"DALC_Scala" 可能是一个全面的 Scala 学习路径,涵盖了从基础到高级的主题,并结合了...

    大数据学习笔记

    ### 大数据学习笔记知识点概览 #### 第一部分:Spark学习 ##### 第1章:Spark介绍 - **1.1 Spark简介与发展** - **背景**:随着大数据处理需求的增长,传统的Hadoop MapReduce框架虽然提供了强大的计算能力,但...

    learn-kotlin:kotlin 学习笔记

    【Kotlin 学习笔记】 Kotlin 是一种现代、面向对象的编程语言,由 JetBrains 公司开发,主要设计用于解决 Java 语言的一些痛点。它被广泛应用于 Android 应用开发,同时也适用于服务器端开发、Web 开发以及跨平台...

    spark笔记整理,2022年3月16日

    本笔记整理主要涵盖了2022年3月16日的学习内容,旨在深入理解和掌握Spark的核心概念和功能。 Spark的核心理念是内存计算,它通过将数据存储在内存中,从而减少了磁盘I/O,提高了数据处理速度。这一特性使得Spark比...

    synapse_interactive_docs:有关如何使用突触的基于jupyter笔记本的文档的存储库

    5. **机器学习与AI**: 结合Synapse Spark和Python的scikit-learn、TensorFlow或PyTorch库,可以在Notebook中开发和训练机器学习模型,实现特征工程、模型选择和评估。 6. **版本控制与协作**: Jupyter Notebook支持...

    大数据技术分享 Spark技术讲座 Apache Spark如何改变我们雇佣员工的方式 共17页.pdf

    Spark由于其简单易学、高效的处理性能、支持批处理和流处理、并且拥有机器学习库等特点,因此成为了很多企业急需的人才技能之一。企业需要找到既懂Spark又能结合业务,支持多语言,以及对数据结构和算法有深刻理解的...

    Mastering-Spark

    4. **MLlib 升级**:机器学习库 MLlib 在 Spark 2.0 中得到了重大更新,增加了新的算法并优化了现有算法的性能。 5. **Spark Connect**:这是一个新的 API,旨在提供一个统一的接口来访问 Spark 的所有组件,从而...

    sparkify:Sparkify是一项(临时)音乐流媒体服务。 此仓库包含后端的ETL逻辑

    Spark提供了多种API,如Scala、Java、Python和R,方便开发者根据项目需求选择合适的编程语言。在这个案例中,Spark可能被用于处理Sparkify服务中的用户行为数据,例如播放歌曲、创建播放列表、用户搜索等。 Jupyter...

    deeplearning4j-examples:Deeplearning4j示例(DL4J,DL4J Spark,DataVec)

    Deeplearning4j(DL4J)是Java和Scala中的一款开源深度学习库,它使得在Java生态系统中构建和部署神经网络成为可能。这个压缩包文件"deeplearning4j-examples"包含了DL4J的示例代码,帮助开发者更好地理解和使用这个...

    Full_Stack_Data_Science:将提供我所有与数据科学相关的工作

    在"Full_Stack_Data_Science-main"这个文件夹中,可能包含了实现上述知识点的相关代码、笔记、教程或者项目文件,通过深入学习和实践这些资源,你可以不断提升自己在数据科学全栈领域的专业能力。

    开源

    Jupyter Notebook是开源领域的杰出代表之一,它是一种交互式计算环境,广泛应用于数据科学、机器学习和教学领域。 Jupyter Notebook是由IPython项目发展而来的一个强大工具,其名称来源于三个主要支持的编程语言:...

Global site tag (gtag.js) - Google Analytics