数组和切片

一.数组

(1)数组是值类型。将一个数组赋值给另一个,会拷贝所有的元素。

(2) 如果你给函数传递一个数组,其将收到一个数组的拷贝,而不是它的指针。

(3)数组的大小是其类型的一部分,类型[10]int和[20]int是不同的。数组长度在声明后,就不可更改。
 

数组的声明 :必须要有长度,而没有长度的就是切片

      ArrayType = "[" ArrayLength "]" ElementType .

 例如:

    var a [32] int

    var b [3][5] int


二. 切片

2.1切片声明:
   SliceType = "[" "]" ElementType .

 例如:

   var a []int

没有初始化的slice为nil。


2.2一般来说,有两种方式来初始化切片:

      切片可以通过数组来初始化,也可以通过内置函数make()初始化 .初始化时len=cap,在追加元素时如果容量cap不足时将按len的 2 倍扩容

(1)通过数组

      var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

     var mySlice []int = myArray[:5]

(2)通过make

    语法:make([]T, length, capacity)

   创建一个初始长度为5,容量为10为切片,切片的每个元素都为0:

   slice1 := make([]int, 5, 10)

   创建一个长度为5的切片,并初始化切片的每个元素:

    slice2 := []int{1, 2, 3, 4, 5}

 2.3切片的len和cap

   长度是指已经被赋过值的最大下标+1,可通过内置函数len()获得。容量是指切片目前可容纳的最多元素个数,可通过内置函数cap()获得
   cap是从切片的下标开始算起


2.4  子切片和append增加的元素都是对源切片的修改,传递的都是引用


nums := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
printSlice(nums, "nums")

nums1 := nums[0:2]
nums3 := append(nums1, 111)
nums3[0] = 121
printSlice(nums1, "nums1")
printSlice(nums3, "nums3")

nums2 := nums[0:4]
printSlice(nums2, "nums2")

结果:

nums=> len=10 cap=10 slice=[0 1 2 3 4 5 6 7 8 9]

nums1=> len=2 cap=10 slice=[121 1]

nums3=> len=3 cap=10 slice=[121 1 111]

nums2=> len=4 cap=10 slice=[121 1 111 3]


2.5数组和切片的遍历


for i, v := range mySlice {

     fmt.Println("mySlice[", i, "] =", v)

2.6 赋值与使用

切片是引用类型,在使用时需要注意其操作。查看示例代码 ,在线运行示例代码 切片可以通过内置函数append(slice []Type,elems ...Type)追加元素,elems可以是一排type类型的数据,也可以是slice,因为追加的一个一个的元素,因此如果将一个slice追加到另一个slice中需要带上"...",这样才能表示是将slice中的元素依次追加到另一个slice中。另外在通过下标访问元素时下标不能超过len大小,如同数组的下标不能超出len范围一样。

s :=append(s,1,2,3,4)
s :=append(s,s1...)        s1是切片








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang的数组切片是两种不同的数据类型,用于存储相同数据类型的容器。数组的长度是固定的,而切片的长度是可变的。在日常应用中,切片的使用更为普遍。 数组在声明时需要指定长度,并且在初始化时必须提供相同长度的元素。例如,`a := int{1, 2, 3}`就是一个长度为3的整数数组数组的长度一旦确定后就不能更改。 切片是基于数组的引用类型。它不需要指定固定的长度,并且可以根据需要动态扩展或缩小。切片包装着底层数组,通过指定起始索引和结束索引来指定子集。例如,`b := a[:]`就是一个切片,它包含了数组a的所有元素。 数组适用于需要固定长度的场景,而切片适用于长度可变的情况。在实际应用中,切片更常用,因为它提供了更大的灵活性和便利性。 总结: - 数组是长度固定的容器,切片是长度可变的容器; - 数组在声明时需要指定长度,切片则不需要; - 数组的长度一旦确定后就不能更改,而切片可以根据需要动态扩展或缩小; - 切片是基于数组的引用类型,可以通过指定起始索引和结束索引来指定子集。 参考资料: Golang中的「数组」和「切片」都是存储同一数据类型的容器,只不过Golang中的数组长度是固定的,而切片的长度是可变化的。 切片是引用类型,切片包装的数组称为该切片的底层数组。我们来看一段代码://a是一个数组,注意数组是一个固定长度的,初始化时候必须要指定长度,不指定长度的话就是切片了 a := int{1, 2, 3} //b是数组,是a...。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值