golang 数组与切片分析
发布日期:2021-06-30 15:37:03 浏览次数:2 分类:技术文章

本文共 2676 字,大约阅读时间需要 8 分钟。

package mainimport "fmt"func main() {   var q = [3]int{1, 2, 3}   fmt.Println(q[2])   //在数组的定义中,如果在数组长度的位置出现“...”省略号,则表示数组的长度是根据初始化值的个数来计算,   var a = [...]int{2, 2, 2}   fmt.Println(a)   //多维数组   //二维数组   //声明一个二维数组 二维长度为 4 和 2   var array [4][2]int   array = [4][2]int{
{10, 11}, {20, 21}, {30, 31}, {40, 41}} fmt.Println(array) 声明并初始化数组中索引为 1 和 3 的元素 array = [4][2]int{1: {20, 21}, 3: {40, 41}} fmt.Println(array) //声明并初始化数组中指定的元素 array = [4][2]int{1: {0: 20}, 3: {1: 41}} fmt.Println(array) //数组和切片 //切片是对数组的一个连续片段的引用.所以切片是一个引用类型 //这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集, // 需要注意的是,终止索引标识的项不包括在切片内 //从数组生成切片 var arr = [3]int{1, 2, 3} fmt.Println(arr, arr[1:2]) var highRiseBuilding [30]int for i := 0; i < 30; i++ { highRiseBuilding[i] = i + 1 } // 区间 尝试出租一个区间楼层。 fmt.Println(highRiseBuilding[10:15]) // 中间到尾部的所有元素 出租 20 层以上。 fmt.Println(highRiseBuilding[20:]) // 开头到中间指定位置的所有元素 出租 2 层以下,一般是商用铺面。 fmt.Println(highRiseBuilding[:2]) //生成新的切片变量 //字符串切片 var strArr []string //整型切片 var numArr []int //声明一个空切片 var emptyArr = []int{} //输出这三个切片 fmt.Println(strArr, numArr, emptyArr) //切片判断为空 fmt.Println(strArr == nil) fmt.Println(numArr == nil) //空切片 为false 已经被分配到了内存,但没有元素,因此和 nil 比较时是 false。 fmt.Println(emptyArr == nil) //使用make 函数来构造切片 //make( []Type, size, cap ) //其中 Type 是指切片的元素类型,size 指的是为这个类型分配多少个元素,cap 为预分配的元素数量, // 这个值设定后不影响 size,只是能提前分配空间,降低多次分配空间造成的性能问题。 //如果需要动态创建一个切片 可以使用make 内置函数 var makeArr = make([]int, 2) fmt.Println(makeArr) makeArr_A := make([]int, 2, 5) fmt.Println(makeArr_A) //使用append 为切片添加元素 var appendArr []int appendArr = append(appendArr, 1) //追加一个 appendArr = append(appendArr, 1, 2, 3) //追加多个 appendArr = append(appendArr, []int{1, 2, 3}...) //追加一个切片 fmt.Println(appendArr) //除了在切片的尾部追加 也可以在切片的前面追加 appendArr_1 := []int{1, 2, 3} appendArr_1 = append([]int{1, 2, 3}, appendArr_1...) fmt.Println(appendArr_1) //在切片开头添加元素一般都会导致内存的重新分配, // 而且会导致已有元素全部被复制 1 次,因此,从切片的开头添加元素的性能要比从尾部追加元素的性能差很多。 //切片的复制 //copy可以将一个数组切片 复制到另一个数组切片中 //copy函数的使用格式 //copy( destSlice, srcSlice []T) int //其中 srcSlice 为数据来源切片,destSlice 为复制的目标(也就是将 srcSlice 复制到 destSlice), // 目标切片必须分配过空间且足够承载复制的元素个数,并且来源和目标的类型必须一致,copy() 函数的返回值表示实际发生复制的元素个数 //下面的代码展示了使用 copy() 函数将一个切片复制到另一个切片的过程: //slice1 := []int{1, 2, 3, 4, 5} //slice2 := []int{5, 4, 3} //copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中 //copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置 //go语言的多维切片 //声明一个二维切片 var slice [][]int //为二维切片 赋值 slice = [][]int{
{10}, {100, 200}} fmt.Println(slice) //取值 fmt.Println(slice[1][:]) //}

转载地址:https://jsonll.blog.csdn.net/article/details/103494077 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:GO map类型
下一篇:golang 变量逃逸分析

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月09日 07时56分41秒