Go語言 - 數組 | 多維數組


Array

數組是同一種數據類型元素的集合。 在Go語言中,數組從聲明時就確定,使用時可以修改數組成員,但是數組大小不可變化。

1.數組 在定義階段,長度和類型就固定了,以后不能更改
2.長度也是數組類型的一部分

數組定義:

var 數組變量名 [元素數量]T

 

// 定義一個長度為3元素類型為int的數組a
var a [3]int

 注意:

package main

import "fmt"

func main()  {
    var a [3]int
    var b [5]int
    fmt.Println(a, b)  // [0 0 0] [0 0 0 0 0]

   a = b //不可以這樣做,因為此時a和b是不同的類型

  // 注意: a與都是b數組, 單兩者是不同類型的數組,因為長度不同 
  // 數組的類型 = 數組內數據的類型 + 定義長度

}

數組的初始化

  •  方式一

package main

import "fmt"

func main()  {
    // var a1 [3]int = [3]int{1,2,3}
    var a1 = [3]int{1,2,3}
    var a2 = [5]int{1,2,3}
    var s1 = [3]string{"上海"}
    fmt.Println(a1)  // [1 2 3]
    fmt.Println(a2)  // [1 2 3 0 0] int類型數組內的數據數量小於定義數量時,默認用零補位
    fmt.Println(s1)  // [上海  ] string類型數組內的數據數量小於定義數量時,默認用空格補位
}
  •  方式二

按照上面的方法每次都要確保提供的初始值和數組長度一致,一般情況下我們可以讓編譯器根據初始值的個數自行推斷數組的長度

package main

import "fmt"

func main()  {
  // 自動獲取數組長度
var a3 = [...]int{1,2,3,4,5} var s2 = [...]string{"上海", "北京"} fmt.Println(a3) // [1 2 3 4 5] fmt.Println(s2) // [上海 北京] }
  •  方式三

我們還可以使用指定索引值的方式來初始化數組

package main

import "fmt"

func main()  {
    var a4 [5]int
    a4 = [5]int{4:1}  // 索引4的數字為1其余為0
    fmt.Println(a4)  // [0 0 0 0 1]
   fmt.Printf("a4的類型是:%T", a4)   // a4的類型是:[5]int
}

 數組的取值

Go語言的數組可按索引取值

package main

import "fmt"

func main()  {
    var s3 = [...]string{"上海", "北京"}
    fmt.Println(s3[1])  // 北京
    fmt.Printf("%T \n", s3[1])  // string
   s4 := s3[0]
    fmt.Println(s4)  // 上海
}

 數組的遍歷

package main

import "fmt"

func main()  {
    var s5 = [3]int{1,2,3}
    for i := 0; i < len(s5); i++{
        fmt.Print(s5[i]) // 123
    }

    for i, v := range s5{
        fmt.Printf("索引:%d 值:%d \n", i, v)  // 索引:0 值:1 ...
    }
}

練習 

  • 求數組內元素的和

package main

import "fmt"

func main()  {
    var a5 = [...]int{1,3,5}
    value := 0
    for index := 0; index < len(a5); index++ {
        value = value + a5[index]
    }
    fmt.Println(value)  // 9

    var v = 0
    for _, i := range a5{
        v = v + i
    }
    fmt.Println(value)  // 9
}
  • 查找[1,3,5,7,8]數組內和為8的元素組合 

package main

import "fmt"

func main()  {
    var a7 = [...]int{1,3,5,7,8}
    for i := 0; i < len(a7); i++ {
        for j := i+1; j < len(a7); j++ {
            if a7[i]+a7[j] == 8 {
                fmt.Printf("(%d %d)", a7[i], a7[j])  // (1 7)(3 5)
            }
        }
    }
}

 

 多維(層)數組

Go語言是支持多維數組的,我們這里以二維數組為例(數組中又嵌套數組)。

 多維數組的定義

package main

import "fmt"

func main()  {
  // 初始化方式一
var a9 [3][2]int a9 = [3][2]int{ [2]int{1,2}, [2]int{3,4}, } fmt.Println(a8) // [1 2 3] fmt.Println(a9) // [[1 2] [3 4] [0 0]] // 初始化方式二 var a10 = [...][2]int{ {6,7}, {8,9}, {0,1}, } fmt.Println(a10) // [[6 7] [8 9] [0 1]] // 注意:多維數組除了第一次可以用[...], 其他層都不能用[...] }

多維數組的取值

package main

import "fmt"

func main()  {
    var a10 = [...][2]int{
        {6,7},
        {8,9},
        {0,1},
    }
    fmt.Println(a10[1][0])  // 8
}

多維數組的遍歷

package main

import "fmt"

func main()  {
    var a10 = [...][2]int{
        {6,7},
        {8,9},
        {0,1},
    }
    // 方式一
    for i := 0; i < len(a10); i++ {
        fmt.Print(a10[i])  // [6 7][8 9][0 1]
    }
    // 方式二
    for _, i := range a10{
        fmt.Print(i)  // [6 7][8 9][0 1]
    }
}

數組是值類型

數組是值類型,賦值和傳參會復制整個數組。因此改變副本的值,不會改變本身的值。

package main

import "fmt"

func main()  {
    a11 := [2]int{1,2}
    a12 := a11  // 在內存中為變量a12開辟了內存空間,存入數組[1 2]
    a11[0] = 5  // 改變的是變量a11在內存中數組[1,2]里的值
    fmt.Println(a11)  // [5 2]
    fmt.Println(a12)  // [1 2]
}

 摘自


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM