Go 語言學(xué)習(xí)之?dāng)?shù)組 字典

仰天長笑出門去,我輩豈是蓬蒿人

前言

在學(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ù)組范圍為:mutableArrayn+1個元素開始到第m個元素截止的數(shù)組

如果n為0,那么表示從第1個元素開始到m個元素

如果m為0,那么表示從第n+1個元素到最后一個元素

如果nm都為0,那么新數(shù)組和mutableArray一樣

mutableArrayF := mutableArrayC[2:4]中,存在一個值,就是最大容量,怎么理解這個最大容量呢?

先看一幅圖

3B8E7FDE-1B10-48CD-A59E-D63199FE59EF.png

圖有點(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)~

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,947評論 18 139
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,473評論 3 44
  • 大黃書《標(biāo)準(zhǔn)日本語》上有這樣一組詞組: 「動詞原形+前に」 「動詞た形+あとで」 那有同學(xué)就不禁要問:日語交流學(xué)習(xí)...
    dc3c12c58779閱讀 2,341評論 0 0
  • 每逢假期過后,回到學(xué)校的學(xué)生便會捶胸頓足,天哪,我離校前信誓旦旦的看書計劃,怎么就忘了呢?明明時間規(guī)劃的很好,怎么...
    昕海薇閱讀 295評論 1 3
  • 近日 終于悟出此道理 共勉 哈哈哈 點(diǎn)擊閱讀原文 開啟“開悟之旅”
    旅行就是不跟團(tuán)閱讀 168評論 0 0