仰天長笑出門去,我輩豈是蓬蒿人
前言
在學(xué)習(xí)了Go
語言中的變量常量之后,緊接著就是我們程序中最常用的數(shù)組和字典了,有了前面的語法基礎(chǔ),下面的學(xué)習(xí)就相對簡單許多,下面就來記錄記錄數(shù)組和字典的使用
數(shù)組
先來回顧下,在C
語言中數(shù)組的使用
//定義
int a[10]; /* 說明整型數(shù)組a,有10個元素 */
float b[10], c[20]; /* 說明實(shí)型數(shù)組b,有10個元素,實(shí)型數(shù)組c,有20個元素 */
char ch[20]; /* 說明字符數(shù)組ch,有20個元素 */
//初始化
int a[5]={1,2,3,4,5};
//當(dāng)然也可以不用指定個數(shù)
int a[]={1,2,3,4,5};
其實(shí)在Go
語言中數(shù)組的定義和C
語言中大同小異,其定義方式為var array [number] type
number
為數(shù)組元素的個數(shù),type
為數(shù)組元素的類型,與c
語言中相同的是都是通過[]
中取值或者賦值
下面來看看幾個例子
//直接初始化賦值
var array = [5] int {1,3,4,5,6};
a0 := array[0];
//先聲明 在賦值
var arrayN [5]int
arrayN[0] = 2;
//簡短聲明 不能省略類型
arrayM := [3]int{4,6,8}
a1 := arrayM[2]
//13為數(shù)組的個數(shù) 數(shù)組前三個元素的值分別為 4,6,8后面的值默認(rèn)為0
arrayB := [13]int{4,6,8}
a2 := arrayB[2]
//將第一個值改為13
arrayB[0] = 13
//系統(tǒng)自己會統(tǒng)計數(shù)量 這里應(yīng)該為5個, 如果取arrayC[5]的話 會報錯 越界
arrayC :=[...] int{2,3,4,56,7}; //可以省略長度,而用"..."來代替 系統(tǒng)自己會統(tǒng)計數(shù)量
//數(shù)組越界
//arrayC[5]
a3 := arrayC[2]
那么支不支持多維數(shù)組呢?答案是肯定的
下面看看一個二維數(shù)組
//二維數(shù)組
doubleArray := [2][3]int{[3]int{1,2,3},[3]int{4,5,6}}
//簡化的二維數(shù)組
doubleArrayA := [2][3]int{{1,2,3},{4,5,6}}
//doubleArray[0][0],doubleArrayA[1][1]的值分別為1和5
動態(tài)數(shù)組
大家都知道,在使用數(shù)組的時候,有時候我們都不知道數(shù)組的數(shù)量為多大,這時我們就需要動態(tài)數(shù)組,在Go
中的動態(tài)數(shù)組其實(shí)和數(shù)組差不多,只是在定義的時候,不需要定義數(shù)量
如
// 和聲明array一樣,只是少了長度
var mutableArray []int
下面看看幾個例子
//定義動態(tài)數(shù)組
// 和聲明array一樣,只是少了長度
var mutableArray = [] int{1,2,3,4}//必須在聲明的時候 初始化賦值
mutableArray[0] = 12
mutableArray[1] = 10
mutableArray[2] = 98
mutableArray[3] = 13//可以改動其值
mutableArrayA := []int{34,45,56,78}
b1 := mutableArrayA[2]
//2相當(dāng)于 mutableArrayA 中的位置 從0開始,這里2就對應(yīng)56
//而4對應(yīng)在數(shù)組mutableArrayA中的長度位置 34就對應(yīng)1 78對應(yīng)此處的4
mutableArrayB := mutableArrayA[2:4]
//mutableArrayB[0] = 56
//mutableArrayB[1] = 78
mutableArrayC := []int{1,2,3,4,5,6,7,8,9,10}
mutableArrayD := mutableArrayC[2:4:7] //固定容量 只能訪問到7 (根據(jù)它生成的數(shù)組)D為{3,4}根據(jù)D生產(chǎn)的數(shù)組最多只能為{3,4,5,6,7}
mutableArrayE := mutableArrayD[0:5] //最多只能生產(chǎn)5個長度的數(shù)組 {3,4,5,6,7}
mutableArrayH := mutableArrayD[1:5] //{4,5,6,7}
mutableArrayF := mutableArrayC[2:4] //不固定容量F的值應(yīng)該為{3,4}
mutableArrayG := mutableArrayF[0:8] //G的值為{3,4,5,6,7,8,9,10}
mutableArrayK := append(mutableArrayG,4) //拼接數(shù)組,K的值為 {3,4,5,6,7,8,9,10,4}
在上面的例子中,有幾個地方需要注意
那就是mutableArray[n:m]
,這是什么意思呢?這個方法的意思是從一個數(shù)組中獲取一個新的數(shù)組
新的數(shù)組范圍為:mutableArray
第n+1
個元素開始到第m
個元素截止的數(shù)組
如果n
為0,那么表示從第1
個元素開始到m
個元素
如果m
為0,那么表示從第n+1
個元素到最后一個元素
如果n
和m
都為0,那么新數(shù)組和mutableArray
一樣
在mutableArrayF := mutableArrayC[2:4]
中,存在一個值,就是最大容量,怎么理解這個最大容量呢?
先看一幅圖
圖有點(diǎn)丑,但是大意是這樣的,mutableArrayF
應(yīng)該為{3,4},現(xiàn)在又新建一個數(shù)組mutableArrayG
,指向的范圍為mutableArrayF
的第1
個元素開始,到第8
個元素結(jié)束,但是我們的mutableArrayF
元素只要兩個元素,明顯是越界了,但是這里卻有個隱含的最大容量
,可以把mutableArrayF
想象成指向mutableArrayC
的一個指針,其最大范圍可以指到mutableArrayC
的最后一個值,這么一來這個最大容量
就可以理解為mutableArrayF
的最大個數(shù)--8,所以這里當(dāng)我們的mutableArrayG
指向mutableArrayF
的第8個元素時,就指向了mutableArrayC
的最后一個元素,故而有了上面的值
關(guān)于mutableArrayD := mutableArrayC[2:4:7]
這個該怎么理解呢?
最后一個7
是用來限制容量的,用7-2=5
可以得到最新的容量,這樣的話,我們mutableArrayE
只能從mutableArrayD
開始訪問最長5
個元素(mutableArrayD為{3,4}
)
字典
關(guān)鍵字:
map
:定義字典,合適為map[keyType] valueType
make
:初始化字典
使用方法
var mDic = make(map[string] string)
mDic["name"] = "gao"
mDic["sex"] = "男"
//通過make
nDic := make(map[string] int)
nDic["age"] = 12
nDic["birthday"] = 90
當(dāng)然我們也可以不用make
來初始化,而通過{}
直接初始化賦值
//不需要make 直接初始化賦值
pDic := map[string]string{"name":"gao","sex":"男","home":"閬中"}
刪除,通過delete
函數(shù)來指定刪除的key
//刪除key
delete(pDic,"name")
關(guān)于字典數(shù)組我所知道的就這么多了,后面將會遇到更嚴(yán)峻的挑戰(zhàn)~
?