數(shù)組是具有相同類型的數(shù)據(jù)項(xiàng)組成的一組長度固定的序列柿赊,數(shù)據(jù)項(xiàng)叫做數(shù)組的元素,數(shù)組的長度必須是非負(fù)整數(shù)的常量幻枉,長度也是類型的一部分碰声。
聲明數(shù)組
Go 語言數(shù)組聲明需要指定元素類型及元素個(gè)數(shù),在數(shù)組聲明后熬甫,其長度不可修改胰挑,數(shù)組的每個(gè)元素會(huì)根據(jù)對(duì)應(yīng)類型的零值對(duì)進(jìn)行初始化。語法格式如下:
var variable_name [SIZE]variable_type
例如以下定義了數(shù)組 balance 長度為 10 類型為 float32:
var balance [10]float32
package main
import "fmt"
func main() {
/*
數(shù)組定義: 相同數(shù)據(jù)類型組成一組固定長度的序列
數(shù)組聲明: 需要指定元素類型 和元素長度 零值為元素類型的零值
*/
var arrayint [10]int
var arraybool [5]bool
var arraystring [10]string
fmt.Printf("%T %v\n", arrayint, arrayint)
fmt.Printf("%T %v\n", arraybool, arraybool)
fmt.Printf("%T %q\n", arraystring, arraystring)
fmt.Printf("%T %v\n", arraystring, arraystring)
// 字面量 賦值是創(chuàng)建新的數(shù)組
// 空 零值
arrayint = [10]int{}
fmt.Println(arrayint)
// 按順序賦值前幾個(gè)
arrayint = [10]int{10, 20, 30}
fmt.Println(arrayint)
// 根據(jù)索引賦值
arrayint = [10]int{0: 10, 9: 20}
fmt.Println(arrayint)
//[...]int{1,2,3} 推導(dǎo)數(shù)組長度
arrayint0 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
fmt.Println(arrayint0)
// 簡短聲明
arrayint2 := [10]int{}
fmt.Printf("%T %v\n", arrayint2, arrayint2)
arrayint3 := [10]int{10, 20, 30}
fmt.Printf("%T %v\n", arrayint3, arrayint3)
arrayint4 := [5]int{0: 1, 4: 5}
fmt.Printf("%T %v\n", arrayint4, arrayint4)
arrayint5 := [...]int{1, 2, 3}
fmt.Printf("%T %v\n", arrayint5, arrayint5)
}
數(shù)組的操作
package main
import "fmt"
func main() {
arrayint5 := [...]int{1, 2, 3}
fmt.Printf("%T %v\n", arrayint5, arrayint5)
// 操作
// 長度不相等椿肩,不能做操作瞻颂,會(huì)報(bào)錯(cuò)invalid operation: nums05 == nums06 (mismatched types [3]int and [5]int)
// 關(guān)系運(yùn)算
arrayint6 := [3]int{1, 3, 4}
//arrayint7 := [4]int{1, 22}
//arrayint7 := [3]int{1, 3, 4}
arrayint7 := [3]int{1, 3}
fmt.Println(arrayint6 == arrayint7)
// 獲取數(shù)組的長度
fmt.Println(len(arrayint7))
// 訪問 索引 0,1,2,...len(array)-1
// 超出索引長度會(huì)報(bào)錯(cuò) invalid argument: index 3 out of bounds [0:3]
fmt.Println(arrayint5[0], arrayint7[0])
arrayint5[0] = 1000
fmt.Println(arrayint5)
// 遍歷數(shù)組
for i := 0; i <= len(arrayint5)-1; i++ {
fmt.Println(arrayint5[i])
}
for i, v := range arrayint5 {
fmt.Println(i, v)
}
for _, v := range arrayint5 {
fmt.Println(v)
}
// 切片 數(shù)組的切片是切片類型
s := "123123123"
fmt.Printf("%T\n", s[1:3])
fmt.Printf("%T\n", arrayint5[0:2:3])
/*
長度和容量
cap即capacity,容量郑象,表示給數(shù)組分配的內(nèi)存空間可以容納多少個(gè)元素
len即length贡这,長度,指的是容器中目前有幾個(gè)元素
由于數(shù)組創(chuàng)建時(shí)就必須確定的元素個(gè)數(shù)厂榛,且不能改變長度盖矫,所以不需要預(yù)留多余的內(nèi)存空間,因此cap和len對(duì)數(shù)組來說相等击奶。
*/
}
多維數(shù)組
定義格式:
var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
聲明二維的整型數(shù)組:
var twodim [10][4]int
二維數(shù)組中的元素可通過 twodim[ i ][ j ] 來訪問辈双。
示例:
package main
import "fmt"
func main() {
//多維數(shù)組
var marrays [3][2]int
fmt.Printf("%T", marrays)
fmt.Println(marrays)
fmt.Println(marrays[0])
fmt.Println(marrays[0][0])
marrays[0] = [2]int{1, 3}
fmt.Println(marrays)
marrays[1][1] = 1000
fmt.Println(marrays)
var m3 [3][2][5]int
fmt.Println(m3)
marrays = [3][2]int{{1, 2}, {3, 4}}
fmt.Println(marrays)
for _, v := range marrays {
for _, vv := range v {
fmt.Print(vv, "\t")
}
fmt.Println()
}
}