




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1.函數(shù)概述幾個(gè)概念的說(shuō)明在學(xué)習(xí)Scala中將方法、函數(shù)、函數(shù)式編程和面向?qū)ο缶幊堂鞔_一下:1.在scala中,方法和函數(shù)幾乎可以等同(比如他們的定義、使用、運(yùn)行機(jī)制都一樣的),只是函數(shù)的使用方式更加的靈活多樣。函數(shù)式編程介紹2.函數(shù)式編程是從編程方式(范式)的角度來(lái)談的,可以這樣理解:函數(shù)式編程把函數(shù)當(dāng)做一等公民,支持的函數(shù)的多種使用方式。
比如:在Scala當(dāng)中,函數(shù)是一等公民,像變量一樣,既可以作為函數(shù)的參數(shù)使用,也可以將函數(shù)賦值給一個(gè)變量.,函數(shù)的創(chuàng)建不用依賴于類或者對(duì)象,而在Java當(dāng)中,函數(shù)的創(chuàng)建則要依賴于類、抽象類或者接口。3.面向?qū)ο缶幊淌且詫?duì)象為基礎(chǔ)的編程方式。4.在scala中函數(shù)式編程和面向?qū)ο缶幊倘诤显谝黄鹆恕:瘮?shù)式編程介紹"函數(shù)式編程"是一種"編程范式"(programmingparadigm)。它屬于"結(jié)構(gòu)化編程"的一種,主要思想是把運(yùn)算過(guò)程盡量寫成一系列嵌套的函數(shù)調(diào)用。函數(shù)式編程中,將函數(shù)也當(dāng)做數(shù)據(jù)類型,因此可以接受函數(shù)當(dāng)作輸入(參數(shù))和輸出(返回值)。函數(shù)式編程中,最重要的就是函數(shù)。函數(shù)式編程介紹為完成某一功能的程序指令(語(yǔ)句)的集合,稱為函數(shù)。函數(shù)狹義的定義基本語(yǔ)法def函數(shù)名([參數(shù)名:參數(shù)類型],...)[[:返回值類型]
=]
{
語(yǔ)句...
return返回值}函數(shù)的格式函數(shù)聲明關(guān)鍵字為def
(definition)[參數(shù)名:參數(shù)類型],...:表示函數(shù)的輸入(就是參數(shù)列表),可以沒有。
如果有,多個(gè)參數(shù)使用逗號(hào)間隔函數(shù)中的語(yǔ)句:表示為了實(shí)現(xiàn)某一功能代碼塊函數(shù)可以有返回值,也可以沒有如果沒有return,默認(rèn)以執(zhí)行到最后一行的結(jié)果作為返回值函數(shù)的格式函數(shù)-調(diào)用過(guò)程在Scala中,函數(shù)的調(diào)用過(guò)程非常簡(jiǎn)單。要調(diào)用一個(gè)函數(shù),只需使用函數(shù)名和實(shí)際參數(shù)列表,并用圓括號(hào)括起來(lái)。為了讓大家更好的理解函數(shù)調(diào)用機(jī)制,比如一下例子,getSum計(jì)算兩個(gè)數(shù)的和,并返回結(jié)果。
objectTest01{defmain(args:Array[String]):Unit={valn1=1valn2=3valres=getSum(n1,n2)println("res="+res)}defgetSum(n1:Int,n2:Int):Int={returnn1+n2}}函數(shù)-調(diào)用機(jī)制2.函數(shù)細(xì)節(jié)和注意事項(xiàng)1.函數(shù)的形參列表可以是多個(gè),如果函數(shù)沒有形參,調(diào)用時(shí)可以不帶()2.形參列表和返回值列表的數(shù)據(jù)類型可以是值類型和引用類型。3.Scala中的函數(shù)可以根據(jù)函數(shù)體最后一行代碼自行推斷函數(shù)返回值類型。那么在這種情況下,return關(guān)鍵字可以省略3.defgetSum(n1:Int,n2:Int):Int={n1+n2}4.defgetSum(n1:Int,n2:Int)={n1+n2}函數(shù)注意事項(xiàng)和細(xì)節(jié)討論4.因?yàn)镾cala可以自行推斷,所以在省略return關(guān)鍵字的場(chǎng)合,返回值類型也可以省略5.如果函數(shù)明確使用return關(guān)鍵字,那么函數(shù)返回就不能使用自行推斷了,這時(shí)要明確寫成:返回類型=,當(dāng)然如果你什么都不寫,即使有return返回值為()defgetSum(n1:Int,n2:Int):Int={//因?yàn)檫@里有明確的return,這時(shí)getSum就不能省略:Int=的Int了
returnn1+n2}函數(shù)注意事項(xiàng)和細(xì)節(jié)討論6.如果函數(shù)明確聲明無(wú)返回值(聲明Unit),那么函數(shù)體中即使使用return關(guān)鍵字也不會(huì)有返回值7.如果明確函數(shù)無(wú)返回值或不確定返回值類型,那么返回值類型可以省略(或聲明為Any)8.Scala語(yǔ)法中任何的語(yǔ)法結(jié)構(gòu)都可以嵌套其他語(yǔ)法結(jié)構(gòu)(靈活),即:函數(shù)中可以再聲明/定義函數(shù),類中可以再聲明類,方法中可以再聲明/定義方法函數(shù)注意事項(xiàng)和細(xì)節(jié)討論9.Scala函數(shù)的形參,在聲明參數(shù)時(shí),直接賦初始值(默認(rèn)值),這時(shí)調(diào)用函數(shù)時(shí),如果沒有指定實(shí)參,則會(huì)使用默認(rèn)值。如果指定了實(shí)參,則實(shí)參會(huì)覆蓋默認(rèn)值。objectHello01{defmain(args:Array[String]):Unit={println(sayOk())println(sayOk("venassa"))//覆蓋默認(rèn)值
}defsayOk(name:String="jack"):String={returnname+"ok!"}}函數(shù)注意事項(xiàng)和細(xì)節(jié)討論10.如果函數(shù)存在多個(gè)參數(shù),每一個(gè)參數(shù)都可以設(shè)定默認(rèn)值,那么這個(gè)時(shí)候,傳遞的參數(shù)到底是覆蓋默認(rèn)值,還是賦值給沒有默認(rèn)值的參數(shù),就不確定了(默認(rèn)按照聲明順序[從左到右])。在這種情況下,可以采用帶名參數(shù)。通過(guò)指定參數(shù)的名字,我們可以明確指出要為哪個(gè)參數(shù)賦值,而不必遵循參數(shù)的聲明順序。例如:defformatName(first:String="John",last:String="Doe")=s"$first$last"println(formatName(last="Smith",first="Jane"))函數(shù)注意事項(xiàng)和細(xì)節(jié)討論11.Scala函數(shù)的形參默認(rèn)是val的,因此不能在函數(shù)中進(jìn)行修改。deftest(n:Int):Unit={n=n+1
//編譯錯(cuò)誤(×)Reassignmenttoval}函數(shù)注意事項(xiàng)和細(xì)節(jié)討論12.遞歸函數(shù)未執(zhí)行之前是無(wú)法推斷出來(lái)結(jié)果類型,在使用時(shí)必須有明確的返回值類型13.Scala函數(shù)支持可變參數(shù)說(shuō)明:args是集合,通過(guò)for循環(huán)
可以訪問到各個(gè)值??勺儏?shù)需要寫在形參列表的最后。//支持0到多個(gè)參數(shù)defsum(args:Int*):Int={}//支持1到多個(gè)參數(shù)defsum(n1:Int,args:Int*):Int={}函數(shù)注意事項(xiàng)和細(xì)節(jié)討論3.遞歸函數(shù)定義:遞歸是指在一個(gè)函數(shù)的定義中直接或間接地調(diào)用該函數(shù)本身的行為。這種自我引用的能力讓遞歸成為解決某些類型問題的理想選擇,如樹形結(jié)構(gòu)遍歷、數(shù)學(xué)運(yùn)算(如階乘、斐波那契數(shù)列)等。遞歸的基本要素:基準(zhǔn)情況(BaseCase):必須有一個(gè)或多個(gè)條件可以終止遞歸調(diào)用,否則會(huì)導(dǎo)致無(wú)限遞歸。遞歸步驟(RecursiveStep):每次遞歸調(diào)用都應(yīng)使問題規(guī)模減小,逐漸接近基準(zhǔn)情況。1.什么是遞歸?在Scala中,定義遞歸函數(shù)的方式與其他函數(shù)相似,但有一個(gè)重要區(qū)別:當(dāng)函數(shù)是遞歸的時(shí),必須顯式聲明返回值類型。這是因?yàn)榫幾g器無(wú)法在編譯前預(yù)測(cè)遞歸調(diào)用的結(jié)果類型。//定義一個(gè)計(jì)算階乘的遞歸函數(shù)deffactorial(n:Int):Int={if(n<=1)1//基準(zhǔn)情況elsen*factorial(n-1)//遞歸步驟}上述factorial函數(shù)接受一個(gè)整數(shù)參數(shù)n,并根據(jù)n的值決定是返回1還是繼續(xù)遞歸調(diào)用自身。注意,這里我們明確指定了返回值類型為Int。2.Scala中的遞歸函數(shù)讓我們來(lái)看幾個(gè)使用遞歸函數(shù)的實(shí)際例子,以便更清楚地理解它們的工作原理。3.1計(jì)算階乘階乘是一個(gè)經(jīng)典的遞歸案例。給定一個(gè)非負(fù)整數(shù)n,它的階乘表示為n!,定義為所有小于等于n的正整數(shù)的乘積。對(duì)于0和1,階乘定義為1。deffactorial(n:Int):Int={if(n==0||n==1)1elsen*factorial(n-1)}3.遞歸函數(shù)的例子3.2斐波那契數(shù)列斐波那契數(shù)列是以意大利數(shù)學(xué)家萊昂納多·斐波那契命名的一系列數(shù)字,其中每個(gè)數(shù)字是前兩個(gè)數(shù)字之和。序列從0和1開始,即0,1,1,2,3,5,8,13...deffibonacci(n:Int):Int={if(n<=1)nelsefibonacci(n-1)+fibonacci(n-2)}
println(fibonacci(7))//輸出:133.遞歸函數(shù)的例子在Scala中,尾遞歸是一種特殊的遞歸形式,它可以被編譯器優(yōu)化成循環(huán),從而避免棧溢出的風(fēng)險(xiǎn)。為了使一個(gè)遞歸函數(shù)被認(rèn)為是尾遞歸,遞歸調(diào)用必須是函數(shù)體中的最后一個(gè)操作。//使用@tailrec注解確保編譯器檢查尾遞歸importscala.annotation.tailrec
deffactorialTailRec(n:Int,acc:Int=1):Int={if(n==0)accelsefactorialTailRec(n-1,n*acc)}在這個(gè)版本的factorialTailRec函數(shù)中,我們引入了一個(gè)額外的參數(shù)acc作為累加器,用來(lái)累積中間結(jié)果。由于遞歸調(diào)用是函數(shù)體的最后一行,因此它可以被優(yōu)化成迭代。4.尾遞歸優(yōu)化通過(guò)本節(jié)課,我們了解了Scala中遞歸函數(shù)的概念及其應(yīng)用。遞歸為我們提供了一種優(yōu)雅的方法來(lái)解決那些可以通過(guò)分治法簡(jiǎn)化的問題。同時(shí),我們也學(xué)習(xí)了如何利用尾遞歸優(yōu)化來(lái)提高性能,并防止?jié)撛诘臈R绯鰡栴}。5.總結(jié)4.高階函數(shù)在Scala中,高階函數(shù)(Higher-orderFunction,HOF)是指可以:接收函數(shù)作為參數(shù),或者返回一個(gè)函數(shù)。這意味著高階函數(shù)的參數(shù)或返回值可以是其他函數(shù),使得函數(shù)的靈活性和表達(dá)能力得到增強(qiáng)。1.高階函數(shù)的定義Scala支持一等函數(shù),即函數(shù)可以作為值來(lái)傳遞。這使得函數(shù)不僅僅是代碼的執(zhí)行指令,還可以作為數(shù)據(jù)在程序中流動(dòng)。高階函數(shù)通常具有以下兩個(gè)特性:函數(shù)作為參數(shù):高階函數(shù)接收另一個(gè)函數(shù)作為參數(shù),來(lái)對(duì)數(shù)據(jù)進(jìn)行處理或轉(zhuǎn)換。函數(shù)作為返回值:高階函數(shù)返回一個(gè)函數(shù),可以創(chuàng)建新的函數(shù)并返回,甚至基于運(yùn)行時(shí)的情況動(dòng)態(tài)創(chuàng)建函數(shù)。2.高階函數(shù)的基本特性3.1函數(shù)作為參數(shù)一個(gè)常見的高階函數(shù)是map。map方法接收一個(gè)函數(shù)作為參數(shù),并對(duì)集合中的每個(gè)元素應(yīng)用該函數(shù),返回新的集合。
代碼說(shuō)明:1.numbers.map(x=>x*x):這里,map方法接收了一個(gè)匿名函數(shù)x=>x*x作為參數(shù),這個(gè)函數(shù)對(duì)每個(gè)元素進(jìn)行平方操作。2.map函數(shù)返回一個(gè)新的集合,其中每個(gè)元素都是原集合元素的平方。objectHigherOrderFunctionExample{defmain(args:Array[String]):Unit={valnumbers=List(1,2,3,4,5)//map函數(shù)接收一個(gè)函數(shù)參數(shù),返回新集合valsquaredNumbers=numbers.map(x=>x*x)println(squaredNumbers)//輸出:List(1,4,9,16,25)}}3.高階函數(shù)的示例3.2函數(shù)作為返回值高階函數(shù)還可以返回函數(shù)。以下示例展示了如何創(chuàng)建一個(gè)返回函數(shù)的函數(shù):objectHigherOrderFunctionReturnExample{defmultiplyBy(factor:Int):Int=>Int={//返回一個(gè)新的函數(shù)(x:Int)=>x*factor}
defmain(args:Array[String]):Unit={valmultiplyByTwo=multiplyBy(2)//創(chuàng)建一個(gè)返回乘以2的函數(shù)valmultiplyByThree=multiplyBy(3)//創(chuàng)建一個(gè)返回乘以3的函數(shù)
println(multiplyByTwo(5))//輸出:10println(multiplyByThree(5))//輸出:15}}代碼說(shuō)明:1.multiplyBy(factor:Int)是一個(gè)高階函數(shù),它返回一個(gè)新的函數(shù)(x:Int)=>x*factor,該函數(shù)將輸入的x乘以factor。2.在main方法中,通過(guò)multiplyBy(2)和multiplyBy(3)創(chuàng)建了兩個(gè)不同的函數(shù)multiplyByTwo和multiplyByThree,分別用于將輸入數(shù)乘以2和3。3.高階函數(shù)的示例在Scala的標(biāo)準(zhǔn)庫(kù)中,很多方法都可以看作是高階函數(shù),特別是在集合操作中。以下是幾個(gè)常見的高階函數(shù):4.1filterfilter方法接收一個(gè)函數(shù)(通常是一個(gè)判斷條件)作為參數(shù),返回一個(gè)新的集合,包含那些滿足條件的元素。valnumbers=List(1,2,3,4,5,6)valevenNumbers=numbers.filter(x=>x%2==0)println(evenNumbers)//輸出:List(2,4,6)4.常見的高階函數(shù)4.2reducereduce方法接收一個(gè)二元操作函數(shù)(通常是一個(gè)合并函數(shù)),通過(guò)將函數(shù)應(yīng)用于集合中的所有元素,最終返回一個(gè)單一的結(jié)果。valnumbers=List(1,2,3,4,5)valsumWithInitialValue=numbers.fold(10)((x,y)=>x+y)println(sumWithInitialValue)//輸出:254.常見的高階函數(shù)高階函數(shù)在實(shí)際應(yīng)用中非常有用,尤其在以下場(chǎng)景中表現(xiàn)得尤為突出:集合處理:如map、filter、reduce、fold等函數(shù)可以使得集合操作更加簡(jiǎn)潔、優(yōu)雅。函數(shù)式編程:Scala是支持函數(shù)式編程的語(yǔ)言,高階函數(shù)使得函數(shù)式編程風(fēng)格更加自然和靈活?;卣{(diào)函數(shù):許多API和框架使用高階函數(shù)來(lái)實(shí)現(xiàn)回調(diào)機(jī)制。例如,處理異步任務(wù)時(shí),我們常常會(huì)傳入一個(gè)回調(diào)函數(shù)。動(dòng)態(tài)函數(shù)生成:通過(guò)高階函數(shù),可以動(dòng)態(tài)地創(chuàng)建特定的計(jì)算邏輯,提供更高的抽象和靈活性。5.高階函數(shù)的應(yīng)用場(chǎng)景高階函數(shù)是Scala的一個(gè)重要特性,它允許函數(shù)作為參數(shù)傳遞,也可以返回函數(shù)。通過(guò)高階函數(shù),開發(fā)者可以寫出更簡(jiǎn)潔、模塊化和高效的代碼。理解并掌握高階函數(shù)的使用,對(duì)深入學(xué)習(xí)Scala及函數(shù)式編程至關(guān)重要。通過(guò)上面的示例,我們了解了如何在Scala中使用高階函數(shù)進(jìn)行集合操作、動(dòng)態(tài)函數(shù)生成等。Scala的高階函數(shù)使得代碼更加簡(jiǎn)潔且表達(dá)能力強(qiáng)大,尤其在函數(shù)式編程中發(fā)揮了巨大的作用。6.小結(jié)5.匿名函數(shù)匿名函數(shù)(AnonymousFunction),也稱為L(zhǎng)ambda函數(shù),是一種沒有名稱的函數(shù)。它通常用于簡(jiǎn)化代碼,尤其是在需要傳遞函數(shù)作為參數(shù)的場(chǎng)景中。Scala中匿名函數(shù)的基本形式如下:(parameters)=>expression?parameters:函數(shù)的輸入?yún)?shù)。?=>:分隔符,表示函數(shù)參數(shù)與函數(shù)體之間的關(guān)系。?expression:函數(shù)體,表示計(jì)算結(jié)果。1.匿名函數(shù)的定義?簡(jiǎn)潔性:匿名函數(shù)無(wú)需定義顯式的函數(shù)名,常用于簡(jiǎn)短的邏輯。?可傳遞性:匿名函數(shù)可以作為參數(shù)傳遞給其他函數(shù),使得代碼更具靈活性。?函數(shù)式編程:匿名函數(shù)是函數(shù)式編程中的一種重要工具,常用于高階函數(shù)和集合操作中。2.匿名函數(shù)的特點(diǎn)3.1示例:簡(jiǎn)單的匿名函數(shù)匿名函數(shù)的基本語(yǔ)法格式如下:(parameters)=>expressionobjectAnonymousFunctionExample{defmain(args:Array[String]):Unit={valadd=(x:Int,y:Int)=>x+y//定義一個(gè)匿名加法函數(shù)println(add(5,3))//輸出:8}}代碼說(shuō)明:1.(x:Int,y:Int)=>x+y:這行代碼定義了一個(gè)接受兩個(gè)Int類型參數(shù)并返回它們和的匿名函數(shù)。2.valadd=:將該匿名函數(shù)賦值給一個(gè)變量add,并通過(guò)add(5,3)調(diào)用它,計(jì)算并輸出5+3=8。3.匿名函數(shù)的基本語(yǔ)法4.1用作集合操作中的函數(shù)匿名函數(shù)經(jīng)常與集合操作(如map、filter、reduce等)一起使用。Scala提供了許多高階函數(shù),這些函數(shù)通常接收匿名函數(shù)作為參數(shù)。valnumbers=List(1,2,3,4,5)valsquaredNumbers=numbers.map(x=>x*x)//使用匿名函數(shù)進(jìn)行平方操作println(squaredNumbers)//輸出:List(1,4,9,16,25)代碼說(shuō)明:1.numbers.map(x=>x*x):對(duì)numbers列表中的每個(gè)元素應(yīng)用匿名函數(shù)x=>x*x,即將每個(gè)元素平方。2.返回一個(gè)新列表List(1,4,9,16,25)。4.匿名函數(shù)的常見用途4.2用作filter函數(shù)filter函數(shù)用于篩選集合中符合條件的元素,匿名函數(shù)可以用來(lái)定義篩選條件。valnumbers=List(1,2,3,4,5,6)valevenNumbers=numbers.filter(x=>x%2==0)//使用匿名函數(shù)篩選偶數(shù)println(evenNumbers)//輸出:List(2,4,6)代碼說(shuō)明:1.numbers.filter(x=>x%2==0):使用匿名函數(shù)x=>x%2==0來(lái)篩選出偶數(shù)。2.返回一個(gè)新列表List(2,4,6)。4.匿名函數(shù)的常見用途4.3用作reduce函數(shù)reduce函數(shù)用于將集合中的元素通過(guò)某種方式合并,通常接收一個(gè)二元操作函數(shù)。我們也可以使用匿名函數(shù)作為操作符。代碼說(shuō)明:1.numbers.reduce((x,y)=>x+y):使用匿名函數(shù)(x,y)=>x+y將列表中的所有元素相加。2.返回結(jié)果15,即1+2+3+4+5=15。valnumbers=List(1,2,3,4,5)valsum=numbers.reduce((x,y)=>x+y)//使用匿名函數(shù)進(jìn)行加法操作println(sum)//輸出:154.匿名函數(shù)的常見用途在Scala中,匿名函數(shù)的參數(shù)類型通??梢杂删幾g器推導(dǎo)出來(lái),這使得匿名函數(shù)的書寫更加簡(jiǎn)潔。5.1示例:類型推導(dǎo)valmultiply=(x:Int,y:Int)=>x*y//類型可以被推導(dǎo)println(multiply(3,4))//輸出:125.類型推導(dǎo)與簡(jiǎn)化5.2示例:簡(jiǎn)化的匿名函數(shù)如果匿名函數(shù)的參數(shù)類型和返回類型是清晰的,甚至可以省略類型聲明。valadd=(x:Int,y:Int)=>x+y//完整的聲明valsubtract=(_:Int,_:Int)=>0//也可以省略參數(shù)名稱代碼說(shuō)明:?在第二個(gè)例子中,(_:Int,_:Int)表示忽略參數(shù)名稱,只提供參數(shù)類型,適用于簡(jiǎn)單的占位符。5.類型推導(dǎo)與簡(jiǎn)化匿名函數(shù)是Scala語(yǔ)言中非常有用的特性之一。通過(guò)匿名函數(shù),我們可以更加簡(jiǎn)潔地編寫代碼,尤其在傳遞函數(shù)作為參數(shù)時(shí),它極大地提升了代碼的靈活性和可讀性。匿名函數(shù)廣泛應(yīng)用于高階函數(shù)、集合操作、回調(diào)函數(shù)等場(chǎng)景,是函數(shù)式編程的重要組成部分。以上就是關(guān)于Scala匿名函數(shù)的基礎(chǔ)要點(diǎn)。匿名函數(shù)不僅讓代碼更加簡(jiǎn)潔,也為函數(shù)式編程提供了強(qiáng)大的支持。在實(shí)際開發(fā)中,掌握匿名函數(shù)的使用方法將幫助你更好地處理函數(shù)作為參數(shù)傳遞、集合操作以及動(dòng)態(tài)生成函數(shù)等問題。6.小結(jié)6.列表Scala提供了多種集合類型來(lái)處理一系列元素,其中List和ListBuffer是兩種常見的列表實(shí)現(xiàn)。List是一個(gè)不可變的鏈表結(jié)構(gòu),而ListBuffer則是一個(gè)可變的緩沖區(qū),允許在運(yùn)行時(shí)動(dòng)態(tài)地添加或移除元素。本文將詳細(xì)介紹這兩種列表的基礎(chǔ)概念、主要區(qū)別以及常用的操作方法,并通過(guò)代碼示例幫助理解。List是Scala中最常用的不可變集合之一,它是一個(gè)有序集合,可以存儲(chǔ)多個(gè)相同類型的元素。List在Scala中屬于不可變集合,這意味著一旦創(chuàng)建就不能修改,而是通過(guò)返回新的列表來(lái)進(jìn)行變更。1.
List1.1List的定義與創(chuàng)建在Scala中,List可以通過(guò)伴生對(duì)象的apply方法創(chuàng)建,支持直接傳遞元素進(jìn)行初始化。1.
ListobjectListExample{defmain(args:Array[String]):Unit={//創(chuàng)建一個(gè)包含元素的Listvallist=List(1,2,3,4,5)
//創(chuàng)建一個(gè)空ListvalemptyList=List.empty[Int]
//訪問List的元素println(list(0))//輸出:1
//遍歷Listlist.foreach(println)//逐行輸出1,2,3,4,5}}代碼說(shuō)明:1.List(1,2,3,4,5)創(chuàng)建了一個(gè)包含5個(gè)元素的整數(shù)列表。2.List.empty[Int]創(chuàng)建了一個(gè)空的整數(shù)列表。3.list(0)訪問列表中的第一個(gè)元素,foreach方法遍歷列表,逐個(gè)打印元素。1.2List的常見操作objectListOperations{defmain(args:Array[String]):Unit={vallist=List(1,2,3,4,5)
//取出頭元素和尾元素println(list.head)//輸出:1println(list.tail)//輸出:List(2,3,4,5)
//拼接列表valnewList=list:+6//在末尾添加元素println(newList)//輸出:List(1,2,3,4,5,6)
valprependedList=0+:list//在頭部添加元素println(prependedList)//輸出:List(0,1,2,3,4,5)
//反轉(zhuǎn)列表println(list.reverse)//輸出:List(5,4,3,2,1)
//映射操作valsquaredList=list.map(x=>x*x)println(squaredList)//輸出:List(1,4,9,16,25)}}代碼說(shuō)明:1.head方法返回列表的第一個(gè)元素,tail返回除第一個(gè)元素外的所有元素。2.:+在列表末尾添加元素,+:在列表頭部添加元素。3.reverse反轉(zhuǎn)列表。4.map對(duì)列表中的每個(gè)元素進(jìn)行映射操作。1.
ListListBuffer是Scala集合庫(kù)中的可變列表,位于scala.collection.mutable包中。與List不同,ListBuffer可以動(dòng)態(tài)修改元素,支持添加和刪除操作。ListBuffer在修改后不會(huì)返回新的列表,而是直接修改原列表。2.1ListBuffer的定義與創(chuàng)建在使用ListBuffer前,需要導(dǎo)入scala.collection.mutable.ListBuffer。2.可變列表(ListBuffer)importscala.collection.mutable.ListBufferobjectListBufferExample{defmain(args:Array[String]):Unit={//創(chuàng)建一個(gè)ListBuffervalbuffer=ListBuffer(1,2,3,4,5)
//添加元素buffer+=6println(buffer)//輸出:ListBuffer(1,2,3,4,5,6)
//刪除元素buffer-=2println(buffer)//輸出:ListBuffer(1,3,4,5,6)
//訪問元素println(buffer(0))//輸出:1}}代碼說(shuō)明:1.ListBuffer(1,2,3,4,5)創(chuàng)建了一個(gè)包含5個(gè)元素的可變列表。2.+=用于在列表末尾添加元素,-=刪除指定元素。3.通過(guò)索引訪問元素,如buffer(0)訪問第一個(gè)元素。2.可變列表(ListBuffer)2.2ListBuffer的常見操作importscala.collection.mutable.ListBuffer
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 等級(jí)測(cè)評(píng)項(xiàng)目實(shí)施監(jiān)督補(bǔ)充合同(公共安全)
- 婚姻忠誠(chéng)協(xié)議中家庭醫(yī)療決策權(quán)重約定書
- 商務(wù)樓宇外立面清洗維護(hù)與節(jié)能減排服務(wù)協(xié)議
- 環(huán)保文化節(jié)策劃與執(zhí)行合作協(xié)議
- 汽車共享平臺(tái)新能源汽車調(diào)度租賃專項(xiàng)協(xié)議
- 離職人員保密協(xié)議與競(jìng)業(yè)禁止合同(物流配送業(yè))
- 治療案例臨床解析與經(jīng)驗(yàn)分享
- 護(hù)理術(shù)后宣教事件案例
- 酒店大堂照明設(shè)施合同(2篇)
- 新噪聲管理?xiàng)l例解讀
- GB/T 24218.1-2009紡織品非織造布試驗(yàn)方法第1部分:?jiǎn)挝幻娣e質(zhì)量的測(cè)定
- GB/T 16895.6-2014低壓電氣裝置第5-52部分:電氣設(shè)備的選擇和安裝布線系統(tǒng)
- GB/T 11032-2020交流無(wú)間隙金屬氧化物避雷器
- 初三中考古詩(shī)文理解性默寫題
- 三年級(jí)數(shù)學(xué)《認(rèn)識(shí)分?jǐn)?shù)》
- 深度解剖華為虛擬股權(quán)激勵(lì)方案最全版含持股比例
- 醫(yī)學(xué)康復(fù)治療技術(shù)作業(yè)治療課件
- 兒科品管圈成果匯報(bào)提高手腕帶佩戴率課件
- 住院患者健康教育計(jì)劃執(zhí)行單
- 中考?xì)v史 (世界現(xiàn)代史)
- 容重器測(cè)量結(jié)果的不確定度評(píng)定
評(píng)論
0/150
提交評(píng)論