Go程式設計基礎06-陣列
阿新 • • 發佈:2018-12-19
陣列
- 陣列的定義格式:
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)
}