1.Option类型

Option类型可以有两种类型,一种是Some(x),一种是None对象

比如Scala的Map的get方法发现了指定键,返回Some(x),没有发现,返回None对象

2.列表

List类型中的所有元素都具有相同的类型

空列表的类型为List[Nothing]。对于任意类型T的List[T],List[Nothing]都是其子类。

val list = List[String]("1","2","3")
val list1 = "1"::"2"::"3"::Nil //所有的列表都是由两个基础构造块Nil和::构造出来的,Nil表示空列表

列表的基本操作

head  返回列表的第一个元素,仅能作用在非空列表上

tail  返回除第一个之外所有元素组成的列表,仅能作用在非空列表上

isEmpty  判断是否为空

列表模式

列表可以使用模式匹配做拆分

val List(a,b,c) = list1   //两个List的长度相等,里面的元素一一对应
val a1 :: b1 :: rest = list1 //如果不知道长度,还是用::来做匹配,rest会是一个List

List类的一阶方法

1.连接列表使用 :::

2.列表长度,length

3.head和tail,获得第一个和除了第一个之外的列表

last和init,获得最后一个和除了最后一个之外的列表

4.翻转列表,reverse

5.drop和take可以返回任意长度的前缀或后缀

6.splitAt可以在指定位置拆分列表

val list = List[String]("1","2","3")
println(list.splitAt(1))

7.apply实现了随机元素的选择,按下标选择元素

indices方法可以返回指定列表的所有有效索引值组成的列表

8.啮合列表:zip,zip操作可以把两个列表组成一个对偶列表

如果想把列表元素和索引值啮合在一起,可以使用zipWithIndex

9.显示列表:toStringmkString

val list = List[String]("1","2","3")
println(list.toString())
//输出 List(1, 2, 3)
val list = List[String]("1","2","3")
println(list.mkString("0",",","4")) //前缀字符串,分隔符,后缀字符串
//输出 01,2,34
val buf = new StringBuilder
println("abcde".addString(buf,"{",";","}"))
#输出 {a;b;c;d;e}

10.转换列表:toArray、copyToArray

val arr = "abcde".toArray   //转换成Array
arr.foreach(print) val l = "abcde".toList //转换成List
l.foreach(print)
    val arr1 = Array[String]("1")
val arr2 = Array[String]("0","0","2")
arr1.copyToArray(arr2,1)     //把第一个arr的元素复制到第二个arr的相应位置
arr2.foreach(print)        //输出012

List类的高阶方法

1.列表间映射:map、flatMap和foreach

map函数f应用在列表的每个元素之后生成的结果,组成一个新的列表,然后返回

    val words = List("Hello","World")
println(words.map(_.toList))
println(words.flatMap(_.toList)) //List(List(H, e, l, l, o), List(W, o, r, l, d))
//List(H, e, l, l, o, W, o, r, l, d)

2.列表过滤:filter、partition、find、takeWhile、dropWhile和span

filter过滤出符合条件的元素组成的列表

    val words = List("Hello","World")
val filt = words.filter(_ == "Hello")
println(filt)      //输出 List(Hello)

partition返回列表对

    val words = List("Hello","World")
val filt = words.partition(_ == "Hello")
println(filt) //输出列表对 (List(Hello),List(World))

find返回第一个满足条件的元素

    val words = List("Hello","World")
val filt = words.find(_ == "Hello")
println(filt) //输出 Some(Hello)

takeWhile和dropWhile返回满足条件的最长前缀和最长后缀

span返回takeWhile和dropWhile的组合

列表的论断:

forall,如果列表中的所有元素都满足条件,返回true

exists,如果列表中有一个元素满足条件,返回true

    val filt = words.forall(_ == "Hello")
println(filt) //返回false

折叠列表 /:和:\

    val result = ("" /: list) (_ + " " + _)   //初始值,加上每个值和间隔的结果
println(result) //返回 [ 1 2 3]
    val result = (list :\ "") (_ + " " + _)   //初始值,加上每个值和间隔的结果
println(result) //返回 [1 2 3 ]

列表排序

    val result = list.sortWith(_ > _)
println(result)

List对象的方法

List.apply,通过元素创建列表

val list = List.apply("4","5","6")

List.range,创建数值范围,生成 List[1,2,3,4,5]

val list = List.range(1,6)

解除啮合列表,List.unzip

连接列表 List.concat

    val list = List[Char]('a','b','c')
val list1 = List[Char]('z','x','c')
val list2 = List.concat(list,list1) println(list2) //输出 List(a, b, c, z, x, c)

3.集合类型

集合类型包括:数组(Array)、列表(List)、集(Set)、映射(Map)

    val list = List(1,2)

    val ite = list.iterator
while (ite.hasNext) {
println(ite.next())
}

数组和列表是不可变对象,操作的时候使用buf来构造

队列(Queue)

添加元素——enqueue()

从头部移除元素——dequeue()

返回添加了元素之后的队列——append()

import scala.collection.mutable.Queue
val empty = new Queue[Int]
empty.enqueue(0)
empty.enqueue(1)
empty.enqueue(2)
empty.dequeue()
println(empty)

 栈和队列差不多

集(Set)

映射(Map)

元组,可以保存不同类型的对象

    val tuple = (1,"2")
println(tuple._1)
println(tuple._2)

Scala学习笔记——类型的更多相关文章

  1. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  2. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  3. Scala学习笔记(1)-基本类型归纳

    1.小试牛刀 使用Scala自带的REPL shell(Read Evaluate Print Loop)学习和尝试Scala语言库,创建的变量在会话期间都是有效的. Ctrl+D可退出REPL sh ...

  4. Scala学习笔记之:tuple、array、Map

    [TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...

  5. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  6. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  7. Scala学习笔记 & 一些不错的学习材料 & 函数编程的历史八卦

    参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-funinscala1/ 这也是一个系列 严格意义上的编程范式分为:命令式编程(Imper ...

  8. Scala学习笔记--上界(<:)、视图界定(<%)、上下文界定(T:M)

    上界 下界 视界 object Test{ def main(args:Array[String]):Unit={ def mulBy(factor:Double)=(x:Double)=>fa ...

  9. Scala学习笔记2 (带着问题学习, 逐渐扩展。理解吃透scala.)

    问题: 把 文本字符串"[1, 2, 3, 4, 5]" 转换成一个数组. 答案: val x = "[1, 2, 3, 4, 5]" val y =x sli ...

随机推荐

  1. 浅表拷贝vs深度拷贝

    浅表复制,只是创建所有的值类型,所有的引用类型还是会指向被复制的对象的引用. 故,当被复制的对象的引用类型发生改变的同事,复制的对象相应的 引用类型的值也是会发生改变的. 所以事件字段也是一个引用类型 ...

  2. [USACO11FEB]Generic Cow Protests

    思路: 动态规划.首先处理出这些数的前缀和$a$,$f_i$记录从第$1$位到第$i$位的最大分组数量.DP方程为:$f_i=max(f_i,f_j+1)$,其中$j$满足$a_i-a_j≥0$. # ...

  3. [NOIp2010提高组]关押罪犯

    OJ题号:洛谷1525 思路:贪心. 先将所有的人按怨气值从大到小排一下,然后依次尝试将双方分入两个不同的监狱,如果失败(即已分入相同的监狱),则输出这个怨气值. #include<cstdio ...

  4. BZOJ4313 : 三维积木

    不妨设$R$是唯一可以看到的颜色,考虑一维序列的情况. 设$f[i][j][k][x][y]$表示考虑了前$i$个位置,第$i$个位置的高度是$j$,最高高度是$k$,已经用了$x$个$R$,$y$个 ...

  5. CF733F Drivers Dissatisfaction【链剖】【最小生成树应用】

    F. Drivers Dissatisfaction time limit per test 4 seconds memory limit per test 256 megabytes input s ...

  6. php中静态方法的使用

    静态方法 (1)静态方法不能访问这个类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性: (2)从当前类(不是子类)中访问静态方法或属性,可以使用 self 关键字,self 指向当前类,就 ...

  7. 通过css实现小三角形

    下面是用css做小三角形的demo, <!DOCTYPE html><html lang="en"><head> <meta charse ...

  8. 数据分析系统DIY1/3:CentOS7+MariaDB安装纪实

    打算通过实践.系统学习一下数据分析. 初步计划要完毕的三个任务. 一.用VMware装64位CentOS,数据库服务端用CentOS自带的就好. 二.数据採集与预处理用Dev-C++编程解决. 三.用 ...

  9. sf2gis@163.com

    1.下载boost1.52,http://www.boost.org/.解压文件到d:\boost\boost_1_52_0. 2.下载python2.7.3,http://www.python.or ...

  10. verilog语法实例学习(12)

    verilog中的综合和不可综合总结 Verilog中综合的概念 综合就是EDA工具或者说综合工具把我们编写的verilog代码转化成具体电路的过程.Verilog中有很多语法,结构,过程,语句,有些 ...