Go學習筆記之:數組

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
  • 數組是一個具有相同資料類型的元素組成的固定長度有序集合

  • 在Go語言中,數組是實值型別,長度是類型的組成部分,也就是說"[10]int"和“[20]int”是完全不同的兩種數群組類型。

  • 同類型的兩個數組支援"=="和"!="比較,但是不能比較大小。

  • 數組作為參數時,函數內部不改變數組內部的值,除非是傳入數組的指標。

  • 數組的指標:*[3]int

  • 指標數組:[2]*int


樣本1:

package mainimport "fmt"func main() {    // 這裡我們建立了一個具有5個元素的整型數組    // 元素的資料類型和數組長度都是數組的一部分    // 預設情況下,數組元素都是零值    // 對於整數,零值就是0    var a [5]int    fmt.Println("emp:", a)    // 我們可以使用索引來設定數組元素的值,就像這樣    // "array[index] = value"  或者使用索引來擷取元素值,    // 就像這樣"array[index]"    a[4] = 100    fmt.Println("set:", a)    fmt.Println("get:", a[4])    // 內建的len函數返回數組的長度    fmt.Println("len:", len(a))    // 這種方法可以同時定義和初始化一個數組    b := [5]int{1, 2, 3, 4, 5}    fmt.Println("dcl:", b)    // 數組都是一維的,但是你可以把數組的元素定義為一個數組    // 來擷取多維陣列結構    var twoD [2][3]int    for i := 0; i < 2; i++ {        for j := 0; j < 3; j++ {            twoD[i][j] = i + j        }    }    fmt.Println("2d: ", twoD)}

輸出結果為

emp: [0 0 0 0 0]set: [0 0 0 0 100]get: 100len: 5dcl: [1 2 3 4 5]2d:  [[0 1 2] [1 2 3]]

擁有固定長度是數組的一個特點,但是這個特點有時候會帶來很多不便,尤其在一個集合元素個數不固定的情況下。這個時候我們更多地使用切片


樣本2:

可以用new建立數組,並返回數組的指標

package mainimport "fmt"func main() {    var a = new([5]int)    test(a)    fmt.Println(a, len(a))}func test(a *[5]int) {    a[1] = 5}

輸出結果

&[0 5 0 0 0] 5


樣本3:

package mainimport "fmt"func main() {    a := [...]User{        {0, "User0"},        {8, "User8"},    }    b := [...]*User{        {0, "User0"},        {8, "User8"},    }    fmt.Println(a, len(a))    fmt.Println(b, len(b))}type User struct {    Id   int    Name string}

輸出結果

[{0 User0} {8 User8}] 2[0x1f216130 0x1f216140] 2


樣本4(練習):

package main import (        "fmt") func main() {         var arr_1 [10]int        var sum int         fmt.Println("\nlen(arr_1): ", len(arr_1))        fmt.Println("initial value of arr_1:")        for _, elem := range arr_1 {                fmt.Print(elem, " ")        }        fmt.Println("\ninitial value of sum: ", sum, "\n")         fmt.Println("arr_1:")        for i := 0; i < len(arr_1); i++ {                arr_1[i] = len(arr_1) - 1 - i                fmt.Println(arr_1[i])        }         fmt.Println("\neach set of range arr_1:\nidx val\n-------")        for idx, val := range arr_1 {                fmt.Println(idx, val)        }         for _, elem := range arr_1 {                sum += elem        }         fmt.Print("\nsum of arr_1: ", sum, "\n\n")         // define array with length unknown, must initialize when defining        var arr_2 = [...]string{                "Sun",                "Air",                "Water"}        fmt.Println("arr_2:")        for _, elem := range arr_2 {                fmt.Println(elem)        }         fmt.Println()}

輸出結果

len(arr_1):  10initial value of arr_1:0 0 0 0 0 0 0 0 0 0 initial value of sum:  0 arr_1:9876543210each set of range arr_1:idx val-------0 91 82 73 64 55 46 37 28 19 0sum of arr_1: 45arr_2:SunAirWater


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.