陣列Array
- 定義陣列的格式:var [n],n>=0
- ==陣列長度也是型別的一部分,因此具有不同長度的陣列為不同型別==
- 注意區分指向陣列的指標和指標陣列
- 陣列在Go中為值型別
- 陣列之間可以使用==或!=進行比較,但不可以使用<或>
- 可以使用new來建立陣列,此方法返回一個指向陣列的指標
- 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 協議》,轉載必須註明作者和本文連結