golang自学之路4-切片与数组

一:闲话杂谈:

之前在学数组,结果意外的把[...]里面的...省略了,还自以为定义了一个数组。结果自己大错特错。前面不加...是表示切片。

所以现在要来了解一下两者的规则:

golang中数组和切片的区别:

  • 切片时指针类型,数组是值类型
  • 数组的长度是固定的,而切片不是(切片是动态的数组)ps:数组前面的[]里面不写数字,写成[...]可以动态推断长度的
  • 切片比数组多一个属性:容量(cap)。数组和切片都通样有个len(),元素个数
  • 切片的底层是数组

另外,根据第一点来看,切片是指针类型,那么在里面进行 操作都属于引用传递,会动态改变其中的值

数组呢,是值传递,按理来说并没有一直改变其中某个元素的值。

二:切片的几个用法:

2.1 类似于python里面,可以对一个可迭代对象用中括号进行取区间

numbers := []int{0,1,2,3,4,5,6,7,8}  
fmt.Println("numbers[1:4] ==", numbers[1:4])
切片初始化
s :=[] int {1,2,3 } 
直接初始化切片,[]表示是切片类型,{1,2,3}初始化值依次是1,2,3.其cap=len=3

s := arr[:] 
初始化切片s,是数组arr的引用

s := arr[startIndex:endIndex] 
将arr中从下标startIndex到endIndex-1 下的元素创建为一个新的切片

s := arr[startIndex:] 
默认 endIndex 时将表示一直到arr的最后一个元素

s := arr[:endIndex] 
默认 startIndex 时将表示从arr的第一个元素开始

s1 := s[startIndex:endIndex] 
通过切片s初始化切片s1

s :=make([]int,len,cap) 

以上粘贴自菜鸟驿站,哦不,菜鸟教程~。都很好理解,和python的用法基本一样的。

2.2 几个函数,len(),cap(),append(),copy()

由于python万物皆是对象,比如数组,直接就能调用.append方法,同js一样

a = []
a.append(1)

golang的话 写法就跟易语言一样的了,append函数等同于易语言的加入成员(数组变量,成员变量)

var numbers []int
numbers = append(numbers, 0)

对于copy方法:

numbers1 := make([]int, len(numbers), (cap(numbers))*2)
copy(numbers1,numbers)

第一个参数是待复制的切片,第二个是想要被复制的切片

至于len()方法和cap()方法,用于切片取长度和切片容量,其中容量是切片独有的,len()是通用的,这些无需多说了 吧。都会。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章