61396-Go語言程序設(shè)計項目化教程(微課版)2.2 復(fù)合數(shù)據(jù)類型_第1頁
61396-Go語言程序設(shè)計項目化教程(微課版)2.2 復(fù)合數(shù)據(jù)類型_第2頁
61396-Go語言程序設(shè)計項目化教程(微課版)2.2 復(fù)合數(shù)據(jù)類型_第3頁
61396-Go語言程序設(shè)計項目化教程(微課版)2.2 復(fù)合數(shù)據(jù)類型_第4頁
61396-Go語言程序設(shè)計項目化教程(微課版)2.2 復(fù)合數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

復(fù)合數(shù)據(jù)類型數(shù)組map映射切片01.03.02.目錄01數(shù)組數(shù)組定義數(shù)組聲明拷貝數(shù)組數(shù)組元素修改1數(shù)組一個由固定長度的特定類型元素組成的序列varvariable_name[size]type數(shù)組定義標(biāo)準(zhǔn)格式聲明數(shù)組vara[3]int //聲明一個數(shù)組名為a、類型為int、大小為3的數(shù)組a[0]=12 //為第一個元素填充數(shù)據(jù)a[1]=78 //為第二個元素填充數(shù)據(jù)a[2]=50 //為第三個元素填充數(shù)據(jù)a:=[3]int{12,78,50} //定義且聲明數(shù)組內(nèi)容a:=[3]int{12} //可以只填充部分?jǐn)?shù)據(jù)varvariable_name=[size]type{value,……}初始化數(shù)組a:=[...]int{12,78,50} //編譯器自行推斷vara=[3]int{12,78,50} //定義且聲明數(shù)組內(nèi)容varvariable_name=[...]type{value,……}自行推斷數(shù)組大小a:=[3]int{1:78,2:50} //填充指定位置1數(shù)組數(shù)組的每個元素可以通過索引下標(biāo)來訪問索引下標(biāo)的范圍從0開始到數(shù)據(jù)長度減1結(jié)束數(shù)組無法靈活擴(kuò)容:在定義數(shù)組元素數(shù)量后,賦值元素變量個數(shù)必須要小于或者等于預(yù)設(shè)置的元素數(shù)量type指任意的基本類型,也可以是數(shù)組本身,實現(xiàn)多維數(shù)組在Go語言中數(shù)組是值類型而不是引用類型這意味著當(dāng)數(shù)組變量被賦值時,將會獲得原數(shù)組的拷貝,新數(shù)組中元素的改變不會影響原數(shù)組中元素的值數(shù)組特點packagemainimport"fmt"funcmain(){a:=[...]int{12,78,50}b:=a //將a數(shù)組復(fù)制給b數(shù)組

b[0]=60fmt.Println(a)fmt.Println(b)}1數(shù)組在Go中數(shù)組是值類型而不是引用類型。當(dāng)數(shù)組變量被賦值時:將會獲得原數(shù)組的拷貝。新數(shù)組中元素的改變不會影響原數(shù)組中元素的值。運行結(jié)果為:[127850][607850]packagemainimport"fmt"funcmain(){ vara[1]string//定義一個1個元素的string類型數(shù)組,string默認(rèn)值為空

varb=[2]string{“a”,“b”}//定義一個2個元素的string類型數(shù)組

c:=[3]string{"a","b","c"}//定義并初始化一個3個空間的string類型數(shù)組

d:=[...]string{"a","b","c","d"}//自動推到元素個數(shù)

e:=d//拷貝數(shù)組

e[0]="e"http://修改數(shù)組指定位置的值

fmt.Println(a,len(a))//打印a數(shù)組、a數(shù)組長度

fmt.Println(b) fmt.Println(c) fmt.Println(d,len(d)) fmt.Println(e,len(e))}1數(shù)組運行結(jié)果為:[]1[ab][abc][abcd]4[ebcd]402切片切片聲明基于數(shù)組創(chuàng)建切片使用make()函數(shù)構(gòu)造切片使用append()為切片動態(tài)添加元素使用copy()復(fù)制新的切片數(shù)組與切片相互轉(zhuǎn)換2切片動態(tài)數(shù)組:切片可以按需自動擴(kuò)充和縮減數(shù)組:長度固定現(xiàn)實中會面臨:往數(shù)組內(nèi)增加>len(數(shù)組名)個元素varname[]type=[]type{……}切片聲明[]中不需要指定長度,即:長度是不固定的可以追加元素,在追加時可能使切片的容量增大,可以從數(shù)據(jù)中生成新的切片或者是聲明新的切片。切片特點packagemainimport"fmt"funcmain(){vara[]int=[]int{10,11,12,13}fmt.Println(a,len(a))}運行結(jié)果為:[10111213]42切片varname[]type=數(shù)組名[開始位置:結(jié)束位置]基于數(shù)組創(chuàng)建切片特點結(jié)束位置的元素不取切片數(shù)量=結(jié)束位置下標(biāo)-開始位置下標(biāo)當(dāng)缺省開始位置時,表示從連續(xù)的區(qū)域開頭到結(jié)束位置當(dāng)缺省結(jié)束位置時,表示從開始位置到整個連續(xù)區(qū)域末尾兩者同時缺省時,與數(shù)組本身等效兩者同時為0時,等于空切片,一般用于切片復(fù)位packagemainimport"fmt"funcmain(){a:=[5]string{"A","B","C","D"}varb[]string=a[1:2]fmt.Println(a)fmt.Println(b,len(b))}運行結(jié)果為:[ABCD][B]1packagemainimport"fmt"funcmain(){a:=[5]int{76,77,78,79,80}varb[]int=a[1:3] //取a數(shù)組的第1到第3個元素varc[]int=a[:3] //取a數(shù)組的第0到第3個元素vard[]int=a[1:] //取a數(shù)組的第1到最后一個元素vare[]int=a[:] //取a數(shù)組的第0到最后一個元素varf[]int=a[0:0] //空切片fmt.Println(a,len(a))fmt.Println(b,len(b))fmt.Println(c,len(c))fmt.Println(d,len(d))fmt.Println(e,len(e))fmt.Println(f,len(f))}運行結(jié)果為:[7677787980]5[7778]2[767778]3[77787980]4[7677787980]5[]02切片packagemainimport"fmt"funcmain(){a:=[5]string{"A","B","C","D","E"}varb[]string=a[1:3]fmt.Println("修改前的a數(shù)組:",a)fmt.Println("修改前的b切片:",b)

b[1]="2"fmt.Println("修改后的a數(shù)組:",a)fmt.Println("修改后的b切片:",b)}運行結(jié)果為:修改前的a數(shù)組:[ABCDE]修改前的b切片:[BC]修改后的a數(shù)組:[AB2DE]修改后的b切片:[B2]2切片切片本身不包含任何數(shù)據(jù)切片僅僅是底層數(shù)組的一個上層表示對切片進(jìn)行的任何修改都將反映在底層數(shù)組中2切片packagemainimport("fmt")funcmain(){a:=[...]string{"A","B","C","D","E"}b:=a[1:3]fmt.Printf("數(shù)組a長度為:%d\n切片b容量為:%d",len(a),cap(b))}運行結(jié)果為:數(shù)組a長度為:5切片b容量為:4切片的長度是指切片中元素的個數(shù)切片的容量是指從切片的起始元素開始到其底層數(shù)組中的最后一個元素的個數(shù)切片的長度可以動態(tài)的改變(最大為其容量)任何超出最大容量的操作都會發(fā)生運行時錯誤2切片varname[]type=make([]type,size,cap)使用make()函數(shù)構(gòu)造切片特點type指切片元素類型size指的是為這個類型分配多少個元素cap為預(yù)分配的元素數(shù)量cap設(shè)定后不會影響size,只是為了提前分配空間,降低多次分配空間造成的性能問題packagemainimport"fmt"funcmain(){vara[]int=make([]int,5,10)//創(chuàng)建一個切片,初始元素個數(shù)為5,并預(yù)留10個元素的存儲空間a[0]=10a[4]=14fmt.Println(a)}運行結(jié)果為:[1000014]2切片append(name,value)append(name,[]type[value,value,value]...)使用append()為切片動態(tài)添加元素特點可以為切片追加單個或多個元素;或者是追加切片使用append()函數(shù)為切片動態(tài)添加元素時,如果空間不足以容納足夠多的元素,切片就會進(jìn)行“擴(kuò)容”,此時新切片的長度會發(fā)生改變。擴(kuò)展容量小于1024個元素時按當(dāng)前切片的容量(Cap)2倍擴(kuò)容,擴(kuò)展容量大于1024個元素時按Cap的1/4擴(kuò)容。2切片packagemainimport"fmt"funcmain(){a:=[]int{10,20,30,40,50}b:=a[1:3]fmt.Println(a)fmt.Println(b)b=append(b,60)fmt.Printf(“第一次追加后,切片a為:%d切片a容量為:%d\n",a,cap(a))fmt.Printf(“第一次追加后,切片b為:%d切片b容量為:%d\n",b,cap(b))b=append(b,70,80,90,100)fmt.Printf(“第二次追加后,切片a為:%d切片a容量為:%d\n",a,cap(a))fmt.Printf(“第二次追加后,切片b為:%d切片b容量為:%d\n",b,cap(b))}運行結(jié)果為:[1020304050][2030]第一次追加后,切片a為:[1020306050]切片a容量為:5第一次追加后,切片b為:[203060]切片b容量為:4第二次追加后,切片a為:[1020306050]切片a容量為:5第二次追加后,切片b為:[203060708090100]切片b容量為:82切片copy(destSlice,srcSlice)使用copy()復(fù)制新的切片特點destSlice為復(fù)制的目標(biāo)切片srcSlice為數(shù)據(jù)來源切片目標(biāo)切片必須分配過空間且足夠承載復(fù)制的元素個數(shù),并且來源和目標(biāo)的類型必須一致。copy()函數(shù)來源切片和目標(biāo)切片可以共享同一個底層數(shù)組,甚至有重疊也沒有問題。packagemainimport"fmt"funcmain(){a:=[]int{0,1,2,3,4,5}b:=[]int{10,11,12}fmt.Println(a)fmt.Println(b)copy(b,a)//只會復(fù)制a的前3個元素到b中

fmt.Println(a)fmt.Println(b)}運行結(jié)果為:[012345][101112][012345][012]2切片packagemainimport"fmt"funcmain(){//切片轉(zhuǎn)成數(shù)組

s:=[]int{10,11,12}vara[3]intfmt.Println(copy(a[:],s))fmt.Println(a)}運行結(jié)果為:3[101112]packagemainimport"fmt"funcmain(){//數(shù)組轉(zhuǎn)成切片

a:=[...]int{10,11,12}b:=make([]int,3)fmt.Println(copy(b,a[:]))fmt.Println(b)}運行結(jié)果為:3[101112]數(shù)組與切片相互轉(zhuǎn)換時:需要使用[:]將數(shù)組偽裝為切片類型后再進(jìn)行賦值,否則無法通過編譯數(shù)組與切片中的元素類型必須相同03map映射map定義使用make()函數(shù)創(chuàng)建map用切片作為map的值使用delete()函數(shù)刪除元素3map映射一種無序的key/value的集合;能夠通過key值快速檢索數(shù)據(jù)值。map這種數(shù)據(jù)結(jié)構(gòu)在其他編程語言中也稱為字典、映射或哈希表。Golang的map由兩種重要的結(jié)構(gòu)構(gòu)成:hmap和bmap。map定義聲明map集合varnamemap[key_type]value_type語法說明如下:(a).name為map變量名;(b).key_type為鍵類型;(c).value_type為鍵對應(yīng)值類型。packagemainimport"fmt"funcmain(){a:=map[int]string{110:"報警電話",120:"急救電話",119:"消防電話"}fmt.Println(a)}運行結(jié)果為:map[110:報警電話119:消防電話120:急救電話]3map映射make(map[KeyType]ValueType,[cap])使用make()函數(shù)創(chuàng)建map特點map可以在聲明的時候填充元素,也可以單獨填充元素map中的數(shù)據(jù)都是成對出現(xiàn)的map類型的變量默認(rèn)初始值為nil其中cap表示map的容量,該參數(shù)雖然不是必須的,但是我們應(yīng)該在初始化map的時候就為其指定一個合適的容量。packagemainimport"fmt"funcmain(){a:=make(map[string]int,10)a["報警電話"]=110;a["急救電話"]=120;a["火警電話"]=119;fmt.Println(a)}運行結(jié)果為:map[急救電話:120報警電話:110火警電話:119]3map映射運行結(jié)果為:[map[A:1

溫馨提示

  • 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

提交評論