1. 程式人生 > >Go程式設計基礎06-陣列

Go程式設計基礎06-陣列

陣列

  • 陣列的定義格式:var varName [n] varType.n >=0
package main

import "fmt"

func main() {
	a := [2]int{1}
	fmt.Println(a)
	// 索引賦值,給索引為10的元素賦值3
	b := [20]int{ 10 : 3}
	fmt.Println(b)
	// 由系統自動計算陣列長度
	c := [...]int{1, 2, 3, 4}
	fmt.Println(len(c))
}
  • 陣列的長度也是型別的一部分,因此不同長度的陣列為不同型別
package
main import "fmt" func main() { var a [2]int var b [1]int a = b // cannot use b (type [1]int) as type [2]int in assignment fmt.Println(a) }
  • 注意區分指向陣列的指標和指標陣列
package main

import "fmt"

func main() {
	a := [...]int{99 : 1}
	// 指向陣列的指標
	var p *[100]int = &a
	fmt.Println(p)
	x, y := 1,
2 // 陣列指標,存放的是指標 b := [...]*int{&x, &y} fmt.Println(b) }
  • 陣列在Go中為值型別,即當將陣列傳遞到方法或者函式中,是將整個陣列拷貝,而不是傳陣列的地址。
  • 陣列之間可以使用==!=進行比較,但不可以使用><
package main

import "fmt"

func main() {
	a := [2]int{1, 2}
	b := [2]int{1}
	c := [3]int{1, 2}
	fmt.Println(a == b) // false
	// 陣列長度不同,型別不同,無法直接比較
fmt.Println(a == c) // invalid operation: a == c (mismatched types [2]int and [3]int) }
  • 可以使用new來建立陣列,此方法返回一個指向陣列的指標
package main

import "fmt"

func main() {
	// 用new建立陣列,返回的是陣列的指標
	p := new([5]int)
	// 不論是指向陣列的指標,還是陣列都可以通過索引改變值
	p[1] = 2
	fmt.Println(p) // &[0 0 0 0 0 0 0 0 0 0]
}
  • Go支援多維陣列
package main

import "fmt"

func main() {
	a := [2][3]int {
		{1, 2, 3},
		{4, 5, 6}  }
	fmt.Println(a)
}
  • 氣泡排序
package main

import "fmt"

func main() {
	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)
}