敏捷硬件开发语言Chisel与数字系统设计 课件 第14章 集合_第1页
敏捷硬件开发语言Chisel与数字系统设计 课件 第14章 集合_第2页
敏捷硬件开发语言Chisel与数字系统设计 课件 第14章 集合_第3页
敏捷硬件开发语言Chisel与数字系统设计 课件 第14章 集合_第4页
敏捷硬件开发语言Chisel与数字系统设计 课件 第14章 集合_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

14.集合西安交通大學XI'ANJIAOTONGUNIVERSITY一、Scala集合基本内容二、数组三、列表四

、数组缓冲与列表缓冲五

、元组六

、映射

七、集八、集合的常用方法ContentsTitle2一

、Scala

集合基本内容正安文是大XPANIIAOT

UNIVERSITY3Scala集合基本内容1.1基本介绍Scala

同时支持可变集合和不可变集合。两个主要的包:不可变集合:scala.collection.immutable可变集合:

scala.collection.mutableScala默认采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可变(mutable)

和不可变(immutable)的版本。4二、数组正安文是大UNIVERSITYXPANIIAOT52.1基本介绍1.

数组是结构最简单的集合,访问速度更快。2.Array是一个具体的类,定义在了scala包下,可以通过new

来构

造一个数组对象。3.

数组元素的类型可以是任意的,但是所有元素的类型必须一致。4.

数组对象必须是定长的。6T指的是数组元素的类型,n指的是数组元素的个数scala>

val

intArray=new

Array[lnt](3)intArray:Array[

lnt]=Array

(0,0,0)scala>intArray(0)=1scala>intArray(1)=

2scala>intArray(

2)=3scala>intArrayres0:Array[lnt

]=Array

1,2,3)方式

一:new

Array[T](n)数组元素的类型为Int,

数组元素的个数为3个数组元素采用小括号()访问和赋

值,同时索引从0开始2.2数组的创建方式二:Array的伴生对象里还定义了一个apply工厂方法,可以在定义数组时直接赋值;类型指定可有可无,会自动推断,因此也可以按如下方式构造

数组对象:scala>val

charArray=Array'a','b','c')charArray:Array[

Char]=Array(a,b,c)数

组2.2数组的创建8正安文是大XPANIIAOT

UNIVERSITY三、列表93.1基本介绍1.列表中所有元素的类型都相同。2.列表是不可变的,一旦被定义了就不能改变,其次列表具有递归的结构。3.List

默认为不可变的集合,定义在scala.collection.immutable

包里,同

时List

在scala

包下声明了。三、列表10scala>

val

intList

=

List(1,1,10,-5)

intList:List

[lnt]=

List(1,1,10,-5)scala>intList(O

)res0:

Int=

1scala>intList(

3)res1:

Int

=-5列表类名为List,

这是一个抽象类,因此不能用new

来构造列表对象。但是伴生对象里有一个apply

工厂方法,接收若干个参数,生成列表。三、列表列表元素采用小括号()访问,索引从0开始3.2列表创建11操作符作用:+向列表的尾部添加元素或列表+:向列表的头部添加元素或列表::向列表的头部添加元素或列表::用于拼接左、右两个列表向列表中增加元素,会返回新的列表/集合对象,所以需要一个新的列表对象来接收。在使用操作符增减元素时,一定要注意原列表与操作符的位置关系。三、列表3.3列表相关操作123.3列表相关操作scala>val

list1=List(1,2,3)

list1:

List[lnt]=

List(1,2,3)scala>val

list2=list1:+

4

list2:

List[

lnt]=List(1,2,3,4)scala>valtest

=list1:+List(1,2)

test:List[Any]=

List(

1,2,3,List(1,2))scala>val

list3

=0

+:list2list3:

List[lnt]=

List(0,1,2,3,4)scala>vallist4

=-2:-1:

:list3list4:List[lnt]=List(-2,-1,0,1,2,3,4)scala>val

list5=list1::list2list5:List[lnt]=

List(1,2,3,1,2,3,4)三、列表13scala>

vallist

=1::2::3::

:Nillist:

List[lnt]=

List(1,2,3)Nil表示空列表,可以调用前面介绍过的几种添加元素的方法。除此之外,我们也可以利用Nil来创建列表。三、列表3.4列表子对象Nil14四、数组缓冲与列表缓冲正安文是大XPANIIAOT

UNIVERSITY15往尾部增加或删除元素时,元素数量可以不只一个,但是在头部添加时一次只能添加一个元素。可以通过方法

“toArray”

“toList”

把缓冲的数据构造成一个数组或列表对象。这是构造一个新的对象,原有缓冲仍然存在。164.1基本介绍>ArrayBuffer/ListBuffer定义在了scala.collection.mutable包下。new

ArrayBuffer/ListBuffer[Int]()操作符作用+=向缓冲的尾部添加元素十=:向缓冲的头部添加元素-=从缓冲的尾部开始删去第一个符合的元素四、数组缓冲与列表缓冲4.2代码举例scala>

import

scala.collection.mutable.{ArrayBuffer,ListBuffer}importscala.collection.mutable.{ArrayBuffer,ListBuffer}scala>

val

a=new

ArrayBuffer[

lnt]()a:scala.collection.mutable.ArrayBuffer[lnt

]=ArrayBuffer()scala>a

+=(1,2,3)res1:a.

type

=ArrayBuffer(1,2,3)scala>

0

+=:ares2:a.

type

=ArrayBuffer(0,1,2,3)scala>a-=

2res3:a.

type

=ArrayBuffer(0,1,3)scala>

val

b=a.toArrayb:Array[

lnt

]=Array(0,1,3)四、数组缓冲与列表缓冲17正安文是大XPANIIAOT

UNIVERSITY五、元组185.1基本知识元

列表相同点

:元组和列表一样,都是不可变的。不同点

:列表包含的元素类型是相同的,元组可以包含不同类型的元素。定义位置不同,List定义在scala.collection.immutable包下

,Tuplex定义在了scala

。五、元组19方法一:valt

=new

Tuple3("God",'A',10)方法二:val

t=("God",'A’,10)每个数字代表元组包含的元素数量,

也就是说元组最多只能包含22个元素。元组并不是一个类,而是一系列类:Tuple1、Tuple2、Tuple3……Tuple22。五、元组new

TupleX(元组元素)5.2元组的定义20scala>

val

tuple=("God",'A',

10)tuple:(

String,Char,Int

)=(God,A,

10)scala>tuple._1res0

:

String

=Godscala>tuple._2res1:

Char

=

A不可遍历,也就无法通过下标来索引。只能通过“_1”、

“_2”……这样来访问每个元素。索引元组的第一个元素,使用“_1”字段五、元组5.2元组的索引21valt1=(

1,"a","b",true,2)for(item<-ductlterator){

println("item="

+item)vala=

List(1,2,3)for(i<-a){println(“i=”+i)元组数据的遍历和其他集合有些不同,需要先调用productIterator方法以获取其迭代器,然后对该迭代器进行遍历。左侧代码实现的是列表的遍历,右侧代码实现的是元组的遍历其功能为分别输出列表和元组中元素的值五、元组5.4元组的遍历22正安文是大XPANIIAOT

UNIVERSITY六、映射23映射并不是一个类,而是一个特质。所以无法用new构建映射对象,只能通过伴生对象里的apply工厂方法来构造映射类型的对象。映射是包含一系列“键-值”对的集合,键和值的类型可以是任意的,但是每个“键-值”对的类型必须一致。表达式“object1->object2”

实际就是一个对偶(二元组),因此”键-值”对也可以写成对偶的形式。六、映

射val

map2=Map((1,"+"),(2,"-"),(3,"*")valmap1=Map(1->

"+",2->"-",3->"*")键

-

>

值6.1映射的定义24方式二:使用map.getOrElse(key,“默认值”)取值,如果key存在,返回对应的值;如果

key

不存在,则返回提供的默认值。方式一:给apply方法提供一个键值作为参数,返回对应的值,若不存在则抛出异常。scala>map.getOrElse(0,"defaultValue")res2

:String

=defaultValuescala>println(map(

3))六、映

射val

map=

Map(

1->"+",2->"-",3->6.2映射的取值方式25方式三:使用map.get(key).get

。如果key存在,map.get(key)

就会返回Some(值)然后Some

(值).get就可以取出对应的值;如果key不存在,

map.get(key)

就会返回None。scala>map.get(O)res0:Option[

String]=Nonescala>map.get(

1)res1:Option[

String

]=Some(+)scala>map.get(

1).getres2:

String=+六、映

射val

map=Map(1->

"+",

2->"-",3->"*“")6.3映射的取值方式26for((k,v)<-map)1/遍历所有的键和值,k

就是键,

v就是值for

(k<-map.keys)//遍历所有的键for

(v<-map.values)//遍历所有的值for

(item<-map)//遍历所有的键值对,此时的item

是元组六、映

射6.4映射的遍历27正安文是大XPANIIAOT

UNIVERSITY七、集287.1基本介绍1.集和映射一样,也是一个特质,也只能通过apply工厂方法构建对象。val

set=

Set(1,2,3)2.集只能包含字面值不相同的同类型元素。3.对象的apply方法是测试是否包含传入的参数,返回true或false。4.Scala

默认使用的是不可变集,其定义在scala.collection.immutable

包下,

声明在了scala包下,所以可以直接使用,不用导入。5.Set

是无序的。七、集29构建时传入了重复参数,但是从返回的

结果上来看,重复的参数只保留了一个。scala>

val

set=Sel(1

,1,10,10,233)set:scala.collection.immutable.Set[Int]=Sel(1,10,233)scala>set(

100)res0:Boolean

=

falsescala>set(233)res1:

Boolean=true七、集测试是否包含传入的参数,若存在,

返回true;若不存在,返回false。7.2集的创建30八

、集合的常用方法正安文是大XPANIIAOT

UNIVERSITY31scala>Array

"apple","orange","pear").map(_+

"s")

res2:Array[

String]=Array(apples,oranges,pears)scala>

List(1,2,3

).map(_*2)res3:

List[lnt]=

List(2,4,6)接收一个无副作用的函数作为入参,对调用该方法的集合的每个元素应用入参函数,并把所得结果全部打包在一个新的集合里返回。集合的常用方法8.1

map方法32scala>

varsum

=

0var

sum:Int=

0scala>

Se(1,-2,234).foreach(sum+=_)scala>sumvalres0:

Int

=

233集合的常用方法foreach方法与map

方法类似,不过它的入参是一个有副作用的函数。8.2foreach方法33scala>

List(1,2,3

)

zip

Array'1','2','3')res0:List[(Int,

Char)]=List(1,1),(2,2),(3,3))scala>

List(1,2,3

)

zip

Set(

"God","OK")res1:List[(

lnt,

String)]=List((1,God),

(2,OK))把两个可迭代的集合——对应,构成若干个对偶。如果其中一个集合比另一个长,则忽略多余的元素。集合的常用方法8.3

zip方法34入参是一个二元操作函数,利用该二元操作函数对集合中的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论