go(5)陣列,切片。

weixin_43751285發表於2020-12-19

在Go語言中,陣列是一種具有相同型別固定大小的一種資料結構。
我們先來看看陣列的使用,陣列型別宣告時的方式是 []T ,前面的[]指定陣列的大小,T指定陣列的型別,如下我們宣告瞭一下陣列,陣列的大小是3,在沒指定陣列初始值時陣列預設初始值是{0,0,0}

array1 := [3]int{}
//我們可以通過如下方式給陣列賦值
array1[0] = 1
array1[1] = 2
array1[2] = 3
//下面這種也是陣列宣告的一種方式,並且初始化陣列的值為{1,2}
array2 := [2]int {1,2}

思考一下前面我們array1賦值給array2對嗎?記住,這種方式是錯誤的,在Go語言中只有大小相等,型別相同的陣列才是同型別的陣列,之間才可以相互賦值,如下截圖,我們可以看見array1賦值給array2時編譯器報錯。

array2 = array1

陣列的遍歷訪問。

//訪問陣列中的元素
array4 := [2]int {1,2}
//訪問陣列下標為0處的值並列印
fmt.Println(array4[0])
//通過range遍歷陣列,
//i代表陣列的下標,
//v代表陣列下標為i處的值
for i,v := range array4{
    fmt.Println(i,v)
}    
array5 := [2][2]int{{1,2},{3,4}}
for i,tempArray := range array5{
    //此時tempArray是一維陣列
    //再通過range 遍歷tempArrayy一維陣列
    for j,v := range tempArray{
        fmt.Println(j,v)
    }
}

切片
在Go語言中,切片是陣列的一種高階運用,相對於陣列,切片是一種更加方便,靈活,高效的資料結構。,切片並不儲存任何元素而只是對現有陣列的引用(不是值拷貝,是指標)
通過陣列建立

array1 := [3]int{1,2,3}
//將陣列下標從1處到下標2處的元素轉換為一個切片(前閉後開)
slice1 := array1[1:2]

通過切片生成一個切片

//下面程式碼直接出初始化一個切片 (這裡大家有個疑問,我不管怎麼看都覺得它是一個陣列啊)
//記住,再go語言中,區別一個變數是陣列還是切片,就看有沒有定義長度
//有定義長度就是陣列,如array1,沒定義就是切片 如slice2
//我們也通過fmt.Println(reflect.TypeOf(array1),reflect.TypeOf(slice2))
//上面這程式碼列印的結果是[3]int,[]int,可以看到前者有長度,後者沒有
slice2 := []int{1,2,3}

相關文章