Go 基礎教程--6 陣列 Array

CR發表於2019-09-16

陣列Array

  1. 定義陣列的格式:var [n],n>=0
  2. ==陣列長度也是型別的一部分,因此具有不同長度的陣列為不同型別==
  3. 注意區分指向陣列的指標和指標陣列
  4. 陣列在Go中為值型別
  5. 陣列之間可以使用==或!=進行比較,但不可以使用<或>
  6. 可以使用new來建立陣列,此方法返回一個指向陣列的指標
  7. Go支援多維陣列

示例1:

package main
import "fmt"
func main() {
    var a [2]int
    var b [1]int
    b = a
    fmt.Println(b)
}
//.\temp10.go:7:4: cannot use a (type [2]int) as type [1]int in assignment
陣列長度也是型別的一部分,因此具有不同長度的陣列為不同型別

var a [2]int
fmt.Println(a)
//[0 0]

var a [2]string
fmt.Println(a
//[ ]

a := [2]int{1,1}
fmt.Println(a)
//[1 1]          

a := [2]int{1}
fmt.Println(a)
//[1 0]

定義一個陣列,前19個都是0,最後一個是1
a := [20]int{19: 1}
fmt.Println(a)
//[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]

不指定長度
a := [...]int{1,2,3,4,5}
fmt.Println(a)
//[1 2 3 4 5]

設定指定元素的陣列
a := [...]int{0: 1, 1: 2, 2: 3,3: 4, 4: 5}
fmt.Println(a)
//[1 2 3 4 5]

指向陣列的指標
a := [...]int{99: 1}
var p *[100]int = &a
fmt.Println(p)
//&[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]

指標陣列
x, y := 1, 2
a := [...]*int{&x,&y}
fmt.Println(a)
//[0xc00004e058 0xc00004e070]

示例2:

資料的比較,注意型別問題

a := [2]int{1,2}
b := [2]int{1,2}
fmt.Println(a == b)
//true

a := [2]int{1,2}
b := [1]int{1}
fmt.Println(a == b)
陣列不同不能比較 
//invalid operation: a == b (mismatched types [2]int and [1]int)

示例3:

可以使用new來建立陣列,此方法返回一個指向陣列的指標

p := new([10]int)
fmt.Println(p)
//&[0 0 0 0 0 0 0 0 0 0]

//對單個陣列的值賦值
a := [10]int{}
a[1] = 2
fmt.Println(a)

p := new([10]int)
p[1] = 2
fmt.Println(p)
//[0 2 0 0 0 0 0 0 0 0]
//&[0 2 0 0 0 0 0 0 0 0]

示例3:

多維陣列

a := [2][3]int{
        {1,1,1},
        {2,2,2}} //此處的}不能另起一行
fmt.Println(a)
//[[1 1 1] [2 2 2]]

a := [...][3]int{
    {1: 1},
    {2: 2}}
fmt.Println(a)
//[[0 1 0] [0 0 2]]

非頂級的陣列長度不能使用...代表長度,否則編譯錯誤

Go語言版氣泡排序

a := [...]int{5, 2, 6, 3, 9}
fmt.Println(a)

num := len(a)
for i := 0; i < num; i++ {
    for j := i + 1; j < num; j++  {
        if a[i] < a[j] {
            temp := a[i]
            a[i] = a[j]
            a[j] = temp
        }
    }
}
fmt.Println(a)
//[5 2 6 3 9]
//[9 6 5 3 2]
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章