Go語言入門3-陣列
阿新 • • 發佈:2019-01-07
陣列Array
- 定義陣列的格式:var < arrName > [n] < type >,n>=0
- 陣列長度也是型別的一部分,因此具有不同長度的陣列為不同型別
func main() {
var a [2]int
fmt.Println(a) //[0 0]
b := [2]int{1,2}
fmt.Println(b) //[1 2]
c := [5]int{4:888} //索引為4的值為888,其餘用零值補充
fmt.Println(c) //[0 0 0 0 888]
d := [...]int{1,2,3,4,5}
fmt.Println(d) //[1 2 3 4 5]
}
- 注意區分指向陣列的指標和指標陣列
//指向陣列的指標
func main() {
a := [...]int{4:888}
var p *[5]int = &a //
fmt.Println(p) //&[0 0 0 0 888], 表明p取的是陣列的地址
}
//指標陣列
func main() {
x,y := 1,2
a := [...]*int{&x,&y}
fmt.Println(a) //[0xc42000e218 0xc42000e240] 儲存的x,y的地址,沒有儲存實際的值
}
- 陣列在Go中為值型別
當把陣列傳遞到方法或者函式當中的時候,將整個陣列進行拷貝,而不是傳遞一個地址給方法或者函式。
- 陣列之間可以使用==或!=進行比較,但不可以使用<或>
func main() {
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) //報錯,型別不同不能比較
}
- 可以使用new來建立陣列,此方法返回一個指向陣列的指標
func main () {
a := [10]int{}
a[1] = 2;
fmt.Println(a) //[0 2 0 0 0 0 0 0 0 0]
p := new([10]int)
p[1] = 2;
fmt.Println(p) //&[0 2 0 0 0 0 0 0 0 0] 返回一個指向陣列的指標
}
- Go支援多維陣列
func main() {
a := [2][3]int{
{1,2,3},
{4,5,6}}
fmt.Println(a) //[[1 2 3] [4 5 6]]
}
- 氣泡排序
func main() {
a := [...]int{4,6,9,2,7}
fmt.Println(a) //[4 6 9 2 7]
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) //[9 7 6 4 2]
}