【笔记】GO内建容器--数组

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

posted @ 2022-01-17 22:03  DbWong_0918  阅读(35)  评论(0编辑  收藏  举报