golang的array/slice
阿新 • • 發佈:2018-12-02
相同點
- 由相同型別的元素組合構成
- 元素有序排列,0為第一個元素下標
- 基本使用方法相同
區別
array宣告時需要指定容量大小,而且無法修改
slice可通過append增加元素,當容量不夠時,會自動擴容
array傳遞型別:值拷貝;slice傳遞型別:引用拷貝(有兩種情況坑)
宣告
var array名 [容量]元素型別 array名 :=[3]元素型別{元素1,元素2,元素3} var slice名 []元素型別 slice名 := make([]型別,容量) //建議這樣宣告 slice名 := []元素型別{元素1,元素2,元素3} // array或者slice聲明後,各元素並不為空,而是該元素型別的 *零 *值 //array宣告時還可以讓編譯器自動匯入元素容量 array名 := [10]int{5:199, 8:200} //多維array/slice //由相同元素型別構成的array/slice 為元素構成的array結構 array名 := [3][2]int{{1,2},{3,5},{9,2}} slice名 := [][]int{{1,2},{3,5},{9,2}} //元素賦值 a[index] = 值
array/slice容量屬性len/cap
- len
- len()方法獲取array/slice的元素個數
- cap
- cap()方法獲取array/slice的最大值可儲存元素個數
根據開始我們說的array和slice特性
array: len和cap值時相等的
slice:初始化時,len和cap值是相等的,當append操作達到當前cap臨界點時,cap值會增大
此時,len與cap的值是不相等的
array/slice遍歷
- 方法一
for index, value := rang a{ fmt.Println(index, value) }
- 方法二
for index := range a{ fmt.Println(a[index]) }
- 方法三
//len()獲取array元素數量 for i :=0; i<len(a); i++{ fmt.Println(a[i]) }
- 多維遍歷
b := [3][2]int{{1,2},{3,5},{9,2}} for index, value := range b{ for i, v := range value{ fmt.Println(index, i. v) } }
- 切片操作
a := [5]int{10, 20, 30, 40, 50} //取出前三個元素, 座標分別是 0, 1, 2 b := a[0:3] bb := a[:3] //取出第三個元素之後所有元素(包含第3個元素) c := a[2:] //取出第2, 3, 4 三個元素 d := a[1:4]
s1 := []int{1, 2} s2 := s1 fmt.Println(s1[0]) fmt.Println(s2[0]) s1[0] = 100 fmt.Println(s1[0]) fmt.Println(s2[0]) temp := []int{5, 6, 7, 8, 9, 10, 11, 12, 13, 14} s1 = append(s1, temp...) s1[0] = 1000 fmt.Println(s1[0]) fmt.Println(s2[0])