1. 程式人生 > >Go語言入門3-陣列

Go語言入門3-陣列

陣列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]

}