Open hic003cih opened 4 years ago
slice並不儲存和複製任何值到定義的slice變數中 所以如果你修改了slice變數內的array的值 會連動修改到原始的array
package main
import "fmt"
func main() {
names := [4]string{
"John",
"Paul",
"George",
"Ringo",
}
fmt.Println(names)
a := names[0:2]
b := names[1:3]
fmt.Println(a, b)
b[0] = "XXX"
fmt.Println(a, b)
fmt.Println(names)
}
append 方法 在slice後面加上數字 append(s,i) 在s後面加上i
make 方法 make([]int,10,32) int -> 要建立的類型 10 -> 長度(length) 32 -> 容量(capacity)
Copy slice
fmt.Println("Copying slice:")
copy(s2, s1)
printSlice(s2)
copy方法
copy(s2, s1)
將 s1 的值,複製到 s2 的 函數去
ex: s1 -> [2,4,6,8]
s2 -> [0,0,0,0]
執行copy後
s2 -> [2,4,6,8,0,0,0,0]
刪除 element
fmt.Println("Deleting elements from slice:")
s2 = append(s2[:3], s2[4:]...)
printSlice(s2)
如果要刪除sliece中的一個元素
使用 append 方法將元素去掉,再合併
我要將s2 的 第4個element[8] 去除
s2 = append(s2[:3], s2[4:]...)
s2[:3] -> 取前3個element -> [2,4,6]
s2[4:] -> 取後5個以後的element -> [0,0,0,0]
再將兩個slice合併
append(s2[:3], s2[4:]...) -> 合併以後 -> [2,4,6,0,0,0]
就可以了
取出頭尾的值
fmt.Println("Popping from front:")
front := s2[0]
s2 = s2[1:]
fmt.Println(front)
printSlice(s2)
將第一個element popp(取出) 第一個element 就是 s2[0] 然後用slice 方法 ,從 1 開始取後面的值 [4,6,0,0,0]
fmt.Println("Popping from back:")
tail := s2[len(s2) - 1]
s2 = s2[:len(s2) -1]
fmt.Println(tail)
printSlice(s2)
將最後一個element popp(取出) 最後一個element 就是 s2[長度- 1] 然後用slice 方法 ,取到後面的最後一個 s2 的 len(s2) 是 5 , 所以要用 s2[:4] s2[:4] -> [4,6,0,0] [4,6,0,0,0]
slice 方法 s2[x:] -> 取x值(index)以後的element
b :=[0,1,2,3,4] ex: e :=b[3:] e -> [3,4] len:2 cap:2
s[:x] -> 取 x (index)以前的element
b :=[0,1,2,3,4] ex c :=b[:2] c -> [0,1] len:2 cap:5
Array(數組) 的大小是固定的,而切片為Array提供動態的大小
类型 []T 表示一个元素类型为 T 的切片。
切片通过两个下标来界定,即一个上界和一个下界,二者以冒号分隔: a[low : high] 它会选择一个半开区间,包括第一个元素,但排除最后一个元素。
以下表达式创建了一个切片,它包含 a 中下标从 1 到 3 的元素:
a[1:4]