Golang Slice
slice range
slicing a slice
append to a slice
deleting from a slice
- Slice 是個composite literal
- 一個 Slice 會儲存同樣 type 的 value
- 如果今天我想要存“我最喜歡的數字“,我會使用 a slice of int
- 如果今天我想要存"我最喜歡的食物",我會使用 a slice of string
- 一個 Slice 會儲存同樣 type 的 value
- 新增 slice
- 利用 composite literal
- composite literal 是一個type 後面接著 {},然後將適當的value放在{}中
- 範例程式碼:
func main() { // COMPOSITE LITERAL x := []int{4, 5, 7, 8, 42} fmt.Println(x) }
- 利用 composite literal
- 遍歷 Slice - Range
- 利用 Range 去取得每個 slice 中的values
-
func main() { x := []int{4, 5, 7, 8, 42} fmt.Println(len(x)) fmt.Println(x) fmt.Println(x[0]) fmt.Println(x[1]) fmt.Println(x[2]) fmt.Println(x[3]) fmt.Println(x[4]) for i, v := range x { fmt.Println(i, v) } }
- 連接 Slice - append slice
-
func main() { x := []int{4, 5, 7, 8, 42} fmt.Println(x) x = append(x, 77, 88, 99, 1014) fmt.Println(x) y := []int{234, 456, 678, 987} x = append(x, y...) fmt.Println(x) }
-
- 分割 Slice - slicing a slice
package main import "fmt" func main() { x := []int{4, 5, 6, 7, 42} fmt.Println(len(x)) fmt.Println(x[:]) fmt.Println(x[1:]) fmt.Println(x[1:3]) for i, v := range x { fmt.Println(i, v) } for i := 0; i <= 4; i++ { fmt.Println(i, x[i]) } }
- 可以利用冒號將 slice 分割
- 利用 x[:] 去取得slice內需要的資料
- 範例程式碼:
- 同樣地 len(x),可以取得 slice 的大小
- Make Slice:
- 先make一個slice
func main() { x := make([]int, 10, 12) fmt.Println(x) fmt.Println(len(x)) fmt.Println(cap(x)) x[0] = 42 x[9] = 999 fmt.Println(x) fmt.Println(len(x)) fmt.Println(cap(x)) x = append(x, 3423) fmt.Println(x) fmt.Println(len(x)) fmt.Println(cap(x)) x = append(x, 3423) fmt.Println(x) fmt.Println(len(x)) fmt.Println(cap(x)) x = append(x, 3423) fmt.Println(x) fmt.Println(len(x)) fmt.Println(cap(x)) }
- 當capacity滿了之後,會把現有的underlying array 複製到一個 double size的array中
- 先make一個slice
- multi-dimensional Slice
- 多維的Slice
- 範例code:
-
func main() { jb := []string{"James", "Bond", "Chocolate", "martini"} fmt.Println(jb) mp := []string{"Miss", "Moneypenny", "strawberry", "Hazelnut"} fmt.Println(mp) xp := [][]string{jb, mp} fmt.Println(xp) }
- print out result:
[James Bond Chocolate martini] [Miss Moneypenny strawberry Hazelnut] [[James Bond Chocolate martini] [Miss Moneypenny strawberry Hazelnut]]
- 刪除 Slice - deleting a slice
- 利用 slice 和 append 去刪除 slice
-
func main() { x := []int{4, 5, 7, 8, 42} fmt.Println(x) x = append(x, 77, 88, 99, 1014) fmt.Println(x) y := []int{234, 456, 678, 987} x = append(x, y...) fmt.Println(x) x = append(x[:2], x[4:]...) fmt.Println(x) }
- Sline坑:s:= make([]int, 0, 0) x := append(s, 1) y := append(s, 20) x,y 都會是[20]
- End