数组和切片

来源:互联网 发布:python opencv 与运算 编辑:程序博客网 时间:2024/06/05 12:07

一.数组

(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