go内建容器--数组
1.数量要写在类型的前面
2.可通过_省略变量
3.不仅是range,任何地方都可以使用_来省略变量
4.如果只要i,则可写成for i := range numbers
5.[10]int和[5]int是不同的类型
6.调用func f(arr [10]int)会对数组进行拷贝
7.在go语言中一般不直接使用数组
// 定义数组
var arr1 [5]int
arr2 := [3]int{1, 2, 3}
arr3 := [...]int{1, 2, 3, 4, 5}
var gridint = [4][5]int
var gridbool = [4][5]bool
// 遍历数组
for i := 0; i<len(arr3); i++{
fmt.Println(arr3[i])
}
// 使用range遍历
for i := range arr3{
arr2[i]
}
//i, v 可以获取对应元素的值, 如果不想要下标,可通过_省略内容
for i, v := range arr3{
fmt.Println(i, v)
}
for _, v := range arr2{
fmt.Println(v)
}
//求和
sum := 0
for _, v := range arr2{
sum += v
}
// 数组是值类型,在go语言中,[]int和[5]int意义不同,[]int是数组的切片,[5]int才是真正的数组,且不同长度的数组,类型不一样, 如[5]int,传入长度非5的数组会报错,因为是值类型,在里面改变的值,在外面是不会改变的,例如将arr的第一个元素改为100,外面的arr是不会改变的,也就是说,值类型在操作的时候是会进行拷贝
func printArray(arr [5]int){
for i, v := range arr{
fmt.Println(i, v)
}
}
printArray(arr1)
printArray(arr3)
printArray(arr2)//会报错
为什么要使用range?
因为意义明确同时还比较美观
c++没有类似于range的能力,java以及python中只能for each value,不能同时获取i和v