Slice Type
Slice
跟陣列使用起來很像,最大的不同是,陣列是值,Slice
是參考到一個陣列。
建立
- 要建立一個全新的
Slice
有兩種方法,一個是使用make
函式:
1 | package main |
- 另一個方法是指定初值,雖然用法跟陣列很像,但形態不一樣就不能拿來一起比較。
1 | package main |
- Slice 是參考到一個陣列
1 | package main |
操作
- 對
Slice
做一些操作 len
函式可以查長度cap
可以查參考的陣列有多少容量
1 | package main |
append
函式可以追加新元素在 Slice 最後面
1 | package main |
-
slice1
加入新元素產生出slice2
有發生長度與容量的變化(長度 + 1 ,容量 * 2),並且最後面slice1
與slice2
的值沒有參考到同個陣列。 -
slice2
加入新元素產生出slice3
只有長度 + 1 而已,最後面的值有參考到同個陣列。 -
Slice
新增元素超過了容量的時候,它會產生新的陣列,且容量有兩倍,給新的Slice
參考;而容量夠用的時候,則不會產生新陣列。 -
copy
函式可以複製內容到另一個Slice
裡
1 | package main |
- 複製時,即使長度不一還是會執行成功,只是會沒有複製完全。
從陣列或 Slice 產生 Slice
- 除了從頭建一個新的
Slice
外,也可以從陣列或Slice
上產生新的Slice
1 | package main |
[1:4]
代表的意思是,從**「第 1 個元素開始,到第 4 個元素,不含第 4 個元素」**,因此取得 [2 3 4] 三個元素。而容量會從第 1 個元素開始,一直到結尾。[1:3]
會從 [2 3 4] 這個Slice
取元素,所以取到的是 [3 4] ,容量是 3。- 因為沒有使用
append
函式,所以都參考到第一個陣列。 - 另外也可以使用
[:]
來取得全部陣列的內容。