scala笔记
来源:互联网 发布:windows 7破解 编辑:程序博客网 时间:2024/06/05 07:57
这篇阅读笔记来自网络。摘自很多自己感觉需要记下来的东西。
Scala中的赋值操作返回的值是Unit
var line = "" while ((line = readLine()) != "") // 在Scala中不能这么用,因为Scala中的赋值操作返回的值是Unit,而""是String类型,不能进行比较,这是函数式编程语言特有的特点 println("Read: "+ line)
<-
- 程序中的<-被称生成器(generator),在执行过程中,集合filesHere中(Array[File])的元素将依次赋给file,file类型为File,打印时调用其toString方法将文件名称打印出来。
scala> for (file <- filesHere)
<-生成器对其它类型的集合也适用,
scala> for(i <- 1 to 5) println("Iteration"+i)Iteration1Iteration2Iteration3Iteration4Iteration5
在for循环结构中还可以加入if进行过滤操作
val filesHere = (new java.io.File(".")).listFilesfor (file <- filesHere if file.getName.endsWith(".scala"))println(file)//还可以加入多个过滤条件,用;隔开for (file <- filesHereif file.isFile;if file.getName.endsWith(".scala")) println(file)
变长数组 ArrayBuffer
//要使用ArrayBuffer,先要引入scala.collection.mutable.ArrayBufferscala> import scala.collection.mutable.ArrayBufferimport scala.collection.mutable.ArrayBuffer//创建String类型ArrayBuffer数组缓冲scala> val strArrayVar=ArrayBuffer[String]()strArrayVar: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()//+=意思是在尾部添加元素scala> strArrayVar+="Hello"res63: strArrayVar.type = ArrayBuffer(Hello)//+=后面还可以跟多个元素的集合//注意操作后的返回值scala> strArrayVar+=("World","Programmer")res64: strArrayVar.type = ArrayBuffer(Hello, World, Programmer)//显示完整数组内容scala> strArrayVarres65: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(Hello, World,Programmer)//++=用于向数组中追加内容,++=右侧可以是任何集合//追加Array数组scala> strArrayVar++=Array("Wllcome","To","XueTuWuYou")res66: strArrayVar.type = ArrayBuffer(Hello, World, Programmer, Wllcome, To, XueTuWuYou)//追加Listscala> strArrayVar++=List("Wellcome","To","XueTuWuYou")res67: strArrayVar.type = ArrayBuffer(Hello, World, Programmer, Wllcome, To, XueTuWuYou, Wellcome, To, XueTuWuYou)//删除末尾n个元素scala> strArrayVar.trimEnd(3)
List与Array有着诸多的相似之处,但它们有两个明显的区别:
1 List一但创建,其值不能被改变
如前面的nums,改变其值的话,编译器会报错
scala> nums(3)=4<console>:10: error: value update is not a member of List[Int] nums(3)=4 ^
2 List具有递归结构(Recursive Structure),例如链表结构
List类型和其它类型集合一样,它具有协变性(Covariant),即对于类型S和T,如果S是T的子类型,则List[S]也是List[T]的子类型
scala> var listStr:List[Object]=List("This","Is","Covariant","Example")listStr: List[Object] = List(This, Is, Covariant, Example)//空的List,其类型为Nothing,Nothing在Scala的继承层次中的最低层//,即Nothing是任何Scala其它类型如String,Object等的子类scala> var listStr=List()listStr: List[Nothing] = List()scala> var listStr:List[String]=List()listStr: List[String] = List()
Nil表示的是一个空的list.
Mutable and Immutable Collections
Scala collections systematically distinguish between mutable and immutable collections. A mutable collection can be updated or extended in place. This means you can change, add, or remove elements of a collection as a side effect. Immutable collections, by contrast, never change. You have still operations that simulate additions, removals, or updates, but those operations will in each case return a new collection and leave the old collection unchanged.
在scala中,默认使用的都是immutable集合,如果要使用mutable集合,需要在程序中引入
import scala.collection.mutable//由于immutable是默认导入的,因此要使用mutable中的集合的话//使用如下语句scala> val mutableSet=mutable.Set(1,2,3)mutableSet: scala.collection.mutable.Set[Int] = Set(1, 2, 3)//不指定的话,创建的是immutable 集合scala> val mutableSet=Set(1,2,3)mutableSet: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
直接使用Set(1,2,3)创建的是immutable集合,这是因为当你不引入任何包的时候,scala会默认导入以几个包:
这里写图片描述
Predef对象中包含了Set、Map等的定义
这里写图片描述
scala集合类的层次结构:
scala.collection包中的集合类层次结构如下图:
这里写图片描述
These are all high-level abstract classes or traits, which generally have mutable as well as immutable implementations.
scala.collection.immutable包中的类层次结构:
这里写图片描述
scala.collection.mutable包中的类层次结构:
这里写图片描述
可变集合与不可变集合对应关系:
- scala 笔记
- Scala笔记
- scala笔记
- scala笔记
- scala笔记
- scala笔记
- scala笔记
- Scala学习笔记1
- Scala学习笔记2
- 笔记之SCala
- scala语言学习笔记
- Scala学习笔记
- scala学习笔记01
- Scala学习笔记02
- Scala学习笔记03
- Scala学习笔记04
- Scala 自学笔记
- scala学习笔记:集合
- linux xfs文件系统无法用readdir获取dirent文件类型d_type则用stat获取暨stat函数讲解
- js限制上传文件类型(2)
- 山寨Besiege(七)加入零件朝向的调整操作
- iOS开发笔记--UIView中的坐标转换
- 通过nginx配置文件抵御攻击
- scala笔记
- map任务数量控制
- Python sftp到远程服务器读取日志文件
- HDU2004 成绩转换
- OpenGL显示文字--显示字符
- 好像最近取北京时间的比较火
- console.table
- python-numpy、scipy
- webView加载进度条