Array(数组)
数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。
数组定义:
var 数组变量名 [元素数量]T
var a1 [3]int //定义一个长度为3且存放int类型的数组 var a2 [2]string //定义一个长度为3且存放string类型的数组 a1 = [3]int{1,2,3} //数组的初始化 a2 = [2]string{"bj","tj"} fmt.Println(a1) //[1 2 3] fmt.Println(a2) //[bj tj]
数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1.
数组的初始化
可以先定义后赋值,也可以让编译器根据初始值的个数自行推断数组的长度。
var num = [...]int{1,2,3,4,5} var city = [...]string{"bj","tj","sz","gz"} fmt.Println(num) //[1 2 3 4 5] fmt.Printf("%T ",num) //[5]int fmt.Println(city) //[bj tj sz gz] fmt.Printf("%T ",city) //[4]string
还可以根据索引值初始化数组:
var e [3]int e = [3]int{2:1} fmt.Println(e) //[0 0 1]
数组的遍历
a := [...]int{1,3,5,7,8} //for循环遍历 for i:=0;i<len(a);i++{ fmt.Println(a[i]) } //for range遍历 for k,v := range a{ fmt.Println(k,v) }
冒泡排序
func main() { arr01 := [...]int{54,123,11,22,875,124} for i :=1;i<len(arr01);i++{ //fmt.Println(arr01[i]) for j:=0;j<len(arr01)-i;j++{ if arr01[j] > arr01[j+1]{ arr01[j],arr01[j+1] = arr01[j+1],arr01[j] } } fmt.Println(arr01) } }
多维数组
二维数组定义
//二维数组定义 two := [3][2]string{ {"beijing","shanghai"}, {"广州","深圳"}, } fmt.Println(two) //[[beijing shanghai] [广州 深圳] [ ]] fmt.Println(two[1][1]) //深圳 //多维数组只有第一层可以使用...来让编译器推导数组长度 two1 := [...][2]string{ {"beijing","shanghai"}, {"广州","深圳"}, {"广州","深圳"}, {"广州","深圳"}, } fmt.Println(two1) //[[beijing shanghai] [广州 深圳] [广州 深圳] [广州 深圳]]
二维数组遍历
for _,v1 :=range two1{ for _,v2 :=range v1{ fmt.Printf("%s ",v2) } fmt.Println() } 输出:beijing shanghai 广州 深圳 广州 深圳 广州 深圳
数组是值类型
数组是值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。
//数组是值类型 s1 := [2]int{1,2} s2 := s1 //s1拷贝一份给s2 s2[1] = 10 fmt.Println(s1) //[1 2] fmt.Println(s2) //[1 10] //多维数组 s3 := [...][2]int{ {1,2}, {3,4}, } s4 := s3 s4[1][1] = 10 fmt.Println(s3) //[[1 2] [3 4]] fmt.Println(s4) //[[1 2] [3 10]]