切片是長度可變的數(shù)組(具有相同數(shù)據(jù)類型的數(shù)據(jù)項組成的一組長度可變的序列)惠豺,切片由三部分組成:
- 指針:指向切片第一個元素指向的數(shù)組元素的地址
- 長度:切片元素的數(shù)量
- 容量:切片開始到結束位置元素的數(shù)量
聲明
切片聲明需要指定組成元素的類型银还,但不需要指定存儲元素的數(shù)量(長度)风宁。在切片聲明后,會被初始化為nil蛹疯,表示暫不存在的切片
初始化
- 使用字面量初始化:[]type{v1, v2, …, vn}
- 使用字面量初始化空切片: []type{}
- 指定長度和容量字面量初始化:[]type{im:vm, in:vn, ilength:vlength}
- 使用make函數(shù)初始化
make([]type, len)/make([]type, len, cap)戒财,通過make函數(shù)創(chuàng)建長度為len,容量為cap的切片苍苞,len必須小于等于cap
- 使用數(shù)組切片操作初始化:array[start:end]/array[start:end:cap](end<=cap<=len)
操作
- 獲取切片長度和容量
使用len函數(shù)可獲取切片的長度固翰,使用cap函數(shù)可獲取切片容量
- 訪問和修改
通過對編號對切片元素進行訪問和修改,元素的編號從左到右依次為:0, 1, 2, …, n(n為切片長度-1)
- 切片: slice[start:end]用于創(chuàng)建一個新的切片羹呵,end <= src_cap
新創(chuàng)建切片長度和容量計算:len: end-start, cap: src_cap-start
切片共享底層數(shù)組骂际,若某個切片元素發(fā)生變化,則數(shù)組和其他有共享元素的切片也會發(fā)生變化
slice[start:end:cap]可用于限制新切片的容量值, end<=cap<= src_cap
新創(chuàng)建切片長度和容量計算:len: end-start, cap: cap-start
- 遍歷
可以通過for+len+訪問方式或for-range方式對切片中元素進行遍歷
使用for-range遍歷切片冈欢,range返回兩個元素分別為切片元素索引和值
- 增加元素
使用append對切片增加一個或多個元素并返回修改后切片歉铝,當長度在容量范圍內時只增加長度,容量和底層數(shù)組不變凑耻。當長度超過容量范圍則會創(chuàng)建一個新的底層數(shù)組并對容量進行智能運算(元素數(shù)量<1024時太示,約按原容量1倍增加,>1024時約按原容量0.25倍增加)
- 復制切片到另一個切片
復制元素數(shù)量為src元素數(shù)量和dest元素數(shù)量的最小值
使用
- 移除元素
- 隊列
先進先出
- 堆棧
先進后出
多維切片
切片的元素也可以是切片類型香浩,此時稱為多維切片
常用包
- sort