昨天沒有寫完的 Array & Slice(上) ,今天要來把補完進度。
那我們就開始吧 ─=≡Σ(((っ゚∀゚)っ
稍微快速回憶一下 slice 的特性:
[]
定義,但不同的是不用在 []
內寫上數量兩種定義方法:
// 方法1
cats := []string{"BuiBui", "MeiMei"}
// 方法2
func make([]string, len, cap)
咦,方法2的 len
及 cap
又代表什麼呢?
slice 裡面包含了三樣東西
以下資訊舉例,當 len 元素有幾個就會長出幾個 0
(因為 []T = []int
,如果是 string 就會是
)。
// len = 3, cap = 3
gopher := make([]int, 3) // => [0, 0, 0]
// len = 0, cap = 5
gopher := make([]int, 0, 5) // => []
需要特別注意的是,len
的長度不能夠超過 cap
,不然會出現錯誤。
// 醬是不行的
gopher := make([]int, 5, 0) // => error!
所以當我們在使用 slice 時,其實是透過 slice 指向某個記憶體位置內的 array。
如果想要新增 slice 的元素,就需要使用 append
這個方法:
cats := []string{"BuiBui", "MeiMei"}
cats = append(cats, "Peko")
登愣!次元切割刀!
拿摸厲害,尼塊縮縮看怎麼用R~
既然 slice 叫做 slice,那麼他應該就能夠做切割!
num := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
num = num[1:3]
fmt.Println(num, len(num), cap(num)) // => [2, 3] len = 2, cap = 8
num := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
num = num[:3]
fmt.Println(num, len(num), cap(num)) // => [1, 2, 3], len = 3, cap = 9
num := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
num = num[3:]
fmt.Println(num, len(num), cap(num)) // => [4, 5, 6, 7, 8, 9], len = 6 , cap = 6
slice 的介紹到這結束了,如果有任何問題歡迎與我告知 :)