敏捷硬件開發(fā)語言Chisel與數(shù)字系統(tǒng)設(shè)計 課件 第14章 集合_第1頁
敏捷硬件開發(fā)語言Chisel與數(shù)字系統(tǒng)設(shè)計 課件 第14章 集合_第2頁
敏捷硬件開發(fā)語言Chisel與數(shù)字系統(tǒng)設(shè)計 課件 第14章 集合_第3頁
敏捷硬件開發(fā)語言Chisel與數(shù)字系統(tǒng)設(shè)計 課件 第14章 集合_第4頁
敏捷硬件開發(fā)語言Chisel與數(shù)字系統(tǒng)設(shè)計 課件 第14章 集合_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

14.集合西安交通大學(xué)XI'ANJIAOTONGUNIVERSITY一、Scala集合基本內(nèi)容二、數(shù)組三、列表四

、數(shù)組緩沖與列表緩沖五

、元組六

、映射

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

、Scala

集合基本內(nèi)容正安文是大XPANIIAOT

UNIVERSITY3Scala集合基本內(nèi)容1.1基本介紹Scala

同時支持可變集合和不可變集合。兩個主要的包:不可變集合:scala.collection.immutable可變集合:

scala.collection.mutableScala默認(rèn)采用不可變集合,對于幾乎所有的集合類,Scala都同時提供了可變(mutable)

和不可變(immutable)的版本。4二、數(shù)組正安文是大UNIVERSITYXPANIIAOT52.1基本介紹1.

數(shù)組是結(jié)構(gòu)最簡單的集合,訪問速度更快。2.Array是一個具體的類,定義在了scala包下,可以通過new

來構(gòu)

造一個數(shù)組對象。3.

數(shù)組元素的類型可以是任意的,但是所有元素的類型必須一致。4.

數(shù)組對象必須是定長的。6T指的是數(shù)組元素的類型,n指的是數(shù)組元素的個數(shù)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)數(shù)組元素的類型為Int,

數(shù)組元素的個數(shù)為3個數(shù)組元素采用小括號()訪問和賦

值,同時索引從0開始2.2數(shù)組的創(chuàng)建方式二:Array的伴生對象里還定義了一個apply工廠方法,可以在定義數(shù)組時直接賦值;類型指定可有可無,會自動推斷,因此也可以按如下方式構(gòu)造

數(shù)組對象:scala>val

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

Char]=Array(a,b,c)數(shù)

組2.2數(shù)組的創(chuàng)建8正安文是大XPANIIAOT

UNIVERSITY三、列表93.1基本介紹1.列表中所有元素的類型都相同。2.列表是不可變的,一旦被定義了就不能改變,其次列表具有遞歸的結(jié)構(gòu)。3.List

默認(rèn)為不可變的集合,定義在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

來構(gòu)造列表對象。但是伴生對象里有一個apply

工廠方法,接收若干個參數(shù),生成列表。三、列表列表元素采用小括號()訪問,索引從0開始3.2列表創(chuàng)建11操作符作用:+向列表的尾部添加元素或列表+:向列表的頭部添加元素或列表::向列表的頭部添加元素或列表::用于拼接左、右兩個列表向列表中增加元素,會返回新的列表/集合對象,所以需要一個新的列表對象來接收。在使用操作符增減元素時,一定要注意原列表與操作符的位置關(guān)系。三、列表3.3列表相關(guān)操作123.3列表相關(guān)操作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表示空列表,可以調(diào)用前面介紹過的幾種添加元素的方法。除此之外,我們也可以利用Nil來創(chuàng)建列表。三、列表3.4列表子對象Nil14四、數(shù)組緩沖與列表緩沖正安文是大XPANIIAOT

UNIVERSITY15往尾部增加或刪除元素時,元素數(shù)量可以不只一個,但是在頭部添加時一次只能添加一個元素。可以通過方法

“toArray”

“toList”

把緩沖的數(shù)據(jù)構(gòu)造成一個數(shù)組或列表對象。這是構(gòu)造一個新的對象,原有緩沖仍然存在。164.1基本介紹>ArrayBuffer/ListBuffer定義在了scala.collection.mutable包下。new

ArrayBuffer/ListBuffer[Int]()操作符作用+=向緩沖的尾部添加元素十=:向緩沖的頭部添加元素-=從緩沖的尾部開始刪去第一個符合的元素四、數(shù)組緩沖與列表緩沖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)四、數(shù)組緩沖與列表緩沖17正安文是大XPANIIAOT

UNIVERSITY五、元組185.1基本知識元

列表相同點(diǎn)

:元組和列表一樣,都是不可變的。不同點(diǎn)

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

,Tuplex定義在了scala

。五、元組19方法一:valt

=new

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

t=("God",'A’,10)每個數(shù)字代表元組包含的元素數(shù)量,

也就是說元組最多只能包含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不可遍歷,也就無法通過下標(biāo)來索引。只能通過“_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)元組數(shù)據(jù)的遍歷和其他集合有些不同,需要先調(diào)用productIterator方法以獲取其迭代器,然后對該迭代器進(jìn)行遍歷。左側(cè)代碼實(shí)現(xiàn)的是列表的遍歷,右側(cè)代碼實(shí)現(xiàn)的是元組的遍歷其功能為分別輸出列表和元組中元素的值五、元組5.4元組的遍歷22正安文是大XPANIIAOT

UNIVERSITY六、映射23映射并不是一個類,而是一個特質(zhì)。所以無法用new構(gòu)建映射對象,只能通過伴生對象里的apply工廠方法來構(gòu)造映射類型的對象。映射是包含一系列“鍵-值”對的集合,鍵和值的類型可以是任意的,但是每個“鍵-值”對的類型必須一致。表達(dá)式“object1->object2”

實(shí)際就是一個對偶(二元組),因此”鍵-值”對也可以寫成對偶的形式。六、映

射val

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

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

-

>

值6.1映射的定義24方式二:使用map.getOrElse(key,“默認(rèn)值”)取值,如果key存在,返回對應(yīng)的值;如果

key

不存在,則返回提供的默認(rèn)值。方式一:給apply方法提供一個鍵值作為參數(shù),返回對應(yīng)的值,若不存在則拋出異常。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就可以取出對應(yīng)的值;如果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.集和映射一樣,也是一個特質(zhì),也只能通過apply工廠方法構(gòu)建對象。val

set=

Set(1,2,3)2.集只能包含字面值不相同的同類型元素。3.對象的apply方法是測試是否包含傳入的參數(shù),返回true或false。4.Scala

默認(rèn)使用的是不可變集,其定義在scala.collection.immutable

包下,

聲明在了scala包下,所以可以直接使用,不用導(dǎo)入。5.Set

是無序的。七、集29構(gòu)建時傳入了重復(fù)參數(shù),但是從返回的

結(jié)果上來看,重復(fù)的參數(shù)只保留了一個。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七、集測試是否包含傳入的參數(shù),若存在,

返回true;若不存在,返回false。7.2集的創(chuàng)建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)接收一個無副作用的函數(shù)作為入?yún)ⅲ瑢φ{(diào)用該方法的集合的每個元素應(yīng)用入?yún)⒑瘮?shù),并把所得結(jié)果全部打包在一個新的集合里返回。集合的常用方法8.1

map方法32scala>

varsum

=

0var

sum:Int=

0scala>

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

Int

=

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

方法類似,不過它的入?yún)⑹且粋€有副作用的函數(shù)。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))把兩個可迭代的集合——對應(yīng),構(gòu)成若干個對偶。如果其中一個集合比另一個長,則忽略多余的元素。集合的常用方法8.3

zip方法34入?yún)⑹且粋€二元操作函數(shù),利用該二元操作函數(shù)對集合中的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論