Go語(yǔ)言中的數(shù)組與切片介紹

這篇文章主要講解了“Go語(yǔ)言中的數(shù)組與切片介紹”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Go語(yǔ)言中的數(shù)組與切片介紹”吧!

10年積累的網(wǎng)站制作、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有青田免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

1. 數(shù)組

數(shù)組是一個(gè)由固定長(zhǎng)度的特定類型元素組成的序列,一個(gè)數(shù)組可以由零個(gè)或多個(gè)元素組成。因?yàn)閿?shù)組的長(zhǎng)度是固定的,所以在Go語(yǔ)言中很少直接使用數(shù)組。

聲明數(shù)組,并給該數(shù)組里的每個(gè)元素賦值(索引值的最小有效值和其他大多數(shù)語(yǔ)言一樣是 0,不是1)

//[3]里的3表示該數(shù)組的元素個(gè)數(shù) vararr[3]int arr[0]=1 arr[1]=2 arr[2]=3

聲明并直接初始化數(shù)組

//第一種方法 vararr[3]int=[3]int{1,2,3} //第二種方法 arr:=[3]int{1,2,3}

上面的 3 表示數(shù)組的元素個(gè)數(shù) ,萬(wàn)一你哪天想往該數(shù)組中增加元素,你得對(duì)應(yīng)修改這個(gè)數(shù)字,為了避免這種硬編碼,你可以這樣寫,使用...讓Go語(yǔ)言自己根據(jù)實(shí)際情況來(lái)分配空間。

arr:=[...]int{1,2,3}

[3]int和[4]int雖然都是數(shù)組,但他們卻是不同的類型,使用 fmt 的%T可以查得,如果使用 == 來(lái)比較,答案會(huì)是false

import("fmt" ) funcmain(){arr01:=[...]int{1,2,3}arr02:=[...]int{1,2,3,4}fmt.Printf("%d的類型是:%T\n",arr01,arr01)fmt.Printf("%d的類型是:%T",arr02,arr02)}

輸出 如下

[1 2 3]的類型是:[3]int [1 2 3 4]的類型是:[4]int

如果你覺得每次寫[3]int有點(diǎn)麻煩,你可以為[3]int定義一個(gè)類型字面量,也就是別名類型。

使用type關(guān)鍵字可以定義一個(gè)類型字面量,后面只要你想定義一個(gè)容器大小為3,元素類型為int的數(shù)組 ,都可以使用這個(gè)別名類型。

import("fmt" ) funcmain(){typearr3[3]int myarr:=arr3{1,2,3}fmt.Printf("%d的類型是:%T",myarr,myarr)}

輸出 如下

[123]的類型是:main.arr3

2. 切片

切片(Slice)與數(shù)組一樣,也是可以容納若干類型相同的元素的容器。與數(shù)組不同的是,無(wú)法通過(guò)切片類型來(lái)確定其值的長(zhǎng)度。每個(gè)切片值都會(huì)將數(shù)組作為其底層數(shù)據(jù)結(jié)構(gòu)。我們也把這樣的數(shù)組稱為切片的底層數(shù)組。

切片是對(duì)數(shù)組的一個(gè)連續(xù)片段的引用,所以切片是一個(gè)引用類型,這個(gè)片段可以是整個(gè)數(shù)組,也可以是由起始和終止索引標(biāo)識(shí)的一些項(xiàng)的子集,需要注意的是,終止索引標(biāo)識(shí)的項(xiàng)不包括在切片內(nèi)(意思是這是個(gè)左閉右開的區(qū)間)

import("fmt" ) funcmain(){myarr:=[...]int{1,2,3}fmt.Printf("%d的類型是:%T",myarr[0:2],myarr[0:2])}

輸出 如下

[1 2]的類型是:[]int

切片的構(gòu)造,有三種方式

    對(duì)數(shù)組進(jìn)行片段截取(上面例子已經(jīng)展示:myarr[0:2],0是索引起始值,2是索引終止值,區(qū)間左半右開)

    從頭聲明賦值(例子如下)

    //聲明字符串切片 varstrList[]string //聲明整型切片 varnumList[]int //聲明一個(gè)空切片 varnumListEmpty=[]int{}

    使用 make 函數(shù)構(gòu)造,make 函數(shù)的格式:make( []Type, size, cap )

    這個(gè)函數(shù)剛好指出了,一個(gè)切片具備的三個(gè)屬性:類型(Type),長(zhǎng)度(size),容量(cap)

    import("fmt" ) funcmain(){a:=make([]int,2)b:=make([]int,2,10)fmt.Println(a,b)fmt.Println(len(a),len(b))fmt.Println(cap(a),cap(b))}

    輸出 如下

    [00][00] 22 210

關(guān)于 len 和 cap 的概念,可能不好理解 ,這里舉個(gè)例子:

公司名,就是變量名。公司里的所有工位,相當(dāng)于已分配到的內(nèi)存空間公司里的員工,相當(dāng)于元素。cap 代表你這個(gè)公司最多可以容納多少員工len 代表你這個(gè)公司當(dāng)前有多少個(gè)員工,所以cap>=len

由于 切片是引用類型,所以你不對(duì)它進(jìn)行賦值的話,它的零值(默認(rèn)值)是 nil

varmyarr[]int fmt.Println(myarr==nil) //true

數(shù)組 與 切片 有相同點(diǎn),它們都是可以容納若干類型相同的元素的容器

也有不同點(diǎn),數(shù)組的容器大小固定,而切片本身是引用類型,它更像是 Python 中的 list ,我們可以對(duì)它 append 進(jìn)行元素的添加。

import("fmt" ) funcmain(){myarr:=[]int{1}//追加一個(gè)元素 myarr=append(myarr,2)//追加多個(gè)元素 myarr=append(myarr,3,4)//追加一個(gè)切片,...表示解包,不能省略 myarr=append(myarr,[]int{7,8}...)//在第一個(gè)位置插入元素 myarr=append([]int{0},myarr...)//在中間插入一個(gè)切片(兩個(gè)元素) myarr=append(myarr[:5],append([]int{5,6},myarr[5:]...)...)fmt.Println(myarr)}

輸出 如下

[012345678]

最后,給你留一道思考題,如下這段代碼:

import("fmt" ) funcmain(){varnumbers4=[...]int{1,2,3,4,5,6,7,8,9,10}myslice:=numbers4[4:6:8]fmt.Printf("myslice為%d,其長(zhǎng)度為:%d\n",myslice,len(myslice))myslice=myslice[:cap(myslice)]fmt.Printf("myslice的第四個(gè)元素為:%d",myslice[3])}

為什么 myslice 的長(zhǎng)度為2,卻能訪問(wèn)到第四個(gè)元素?

myslice為[56],其長(zhǎng)度為:2 myslice的第四個(gè)元素為:8

感謝各位的閱讀,以上就是“Go語(yǔ)言中的數(shù)組與切片介紹”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Go語(yǔ)言中的數(shù)組與切片介紹這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

分享題目:Go語(yǔ)言中的數(shù)組與切片介紹
標(biāo)題路徑:http://muchs.cn/article38/jpidpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、云服務(wù)器、App開發(fā)、網(wǎng)站制作、域名注冊(cè)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管