go之数组
数组
数组是同一类型元素的集合。例如整数集合5,8,9,10形成一个数组,go语言中不允许混合不同类型的元素,例如包含字符串和整数的数组
数组是连续存储的内存空间,一旦申请,大小固定,不能再改变
定义没有初始化
package main import "fmt" func main() { var a [3]int // 没有初始化,默认值是 0 0 0 fmt.Println(a) }
定义并初始化
package main import "fmt" func main() { var a [3]int=[3]int{4,7} // 少于长度可以,多于不行 //var a =[3]int{4,7} // 少于长度可以,多于不行 //a :=[3]int{4,7} // 少于长度可以,多于不行 fmt.Println(a) //[4 7 0] }
定义并初始化其中一个
package main import "fmt" func main() { var a [10]int=[10]int{8:99,6:77} fmt.Println(a) } //[0 0 0 0 0 0 77 0 99 0]
定义并附初值的另一种方式
package main import "fmt" func main() { //var a =[...]int{3,5,7,9} // 意思并不是数组可变长,意思是使用后面的值来确定数组的长度 [3 5 7 9] var a =[...]int{9:888} // 意思并不是数组可变长,意思是使用后面的值来确定数组的长度 [0 0 0 0 0 0 0 0 0 888] fmt.Println(a) }
数组取值赋值
package main import "fmt" func main() { var a =[...]int{3,5,7,9} fmt.Println(a[0]) // 取值 3 //fmt.Println(a[4]) // 直接越界 ,数组长度只有4 a[1]=999 fmt.Println(a) //赋值[3 999 7 9] }
数组大小是类型的一部分
package main import "fmt" func main() { //var a =[4]int{3,5,7,9} var a =[5]int{3,5,7,9} var b =[5]int{3,5,7,9} if a==b{ fmt.Println("hello world") //hello world } }
数组是值类型,在函数中当参数传递
go语言中函数的参数传递都是copy传递,不会影响原来的
package main import "fmt" func main() { var b =[5]int{3,5,7,9} test(b) // 把b复制一份传过去,传到函数内部,新的b,在函数中改了新的b不会影响原来的 // 通过指针,可以操作 fmt.Println(b) } func test(b [5]int) { b[0]=999 // 改了,会不会影响原来? fmt.Println("函数内部",b) } //函数内部 [999 5 7 9 0] //[3 5 7 9 0]
数组的长度,内置函数len
package main import "fmt" func main() { var b =[5]int{3,5,7,9} fmt.Println(len(b)) //5 }
使用range迭代数组
方式一:基于索引
package main import "fmt" func main() { var b =[5]int{3,5,7,9} for i:=0;i<len(b);i++{ fmt.Println(b[i]) } } //3 //5 //7 //9 //0
方式二:基于迭代
package main import "fmt" func main() { var b =[5]int{3,5,7,9} for i,v:=range b{ fmt.Println(i,v) } } //0 3 //1 5 //2 7 //3 9 //4 0
多维数组
最多写两层即可,多写不好
package main import "fmt" func main() { var b [3][2]int fmt.Println(b) //[[0 0][0 0][0 0]] var a [3][2]int = [3][2]int{{1, 2}, {4}, {6, 7}} fmt.Println(a) //[[1 2] [4 0] [6 7]] //取值赋值 a[0][1] = 999 fmt.Println(a) //[[1 999] [4 0] [6 7]] }
循环二维数组--两层循环
package main import "fmt" func main() { var a [3][2]int=[3][2]int{{1,2},{4,},{6,7}} for _,v:=range a { for _, v1 := range v { fmt.Println(v1) } } } //1 //2 //4 //0 //6 //7