golang 之slice 變長陣列
slice:就是變長陣列,主要是因為array(陣列)長度不可變,導致在使用的時候存在諸多限制,才有了slice;slice 主要包含3個部分:1、指標 2、容量 3、長度 ,由於slice 的底層結構依然是陣列,所以操作的時候,不是操作slice的資料,而實際是操作底層陣列的資料,所以得有指向該陣列的指標,長度則表示當前slice的長度(非底層陣列的長度),容量則表示從slice起始位置到底層陣列的結束位置,注意此處是位置差,即表示能存放多少個元素。
slice 的用法和array類似,但申明時,不指定陣列的長度,如 var s []int,slice 透過len(s),cap(s)檢視s的長度和容量
測試下:
main main(){ testArray =[]int {,,,,,,,,,} fmt.Println(testArray[:]) fmt.Println(testArray[len(testArray)-]) i,v:=testArray { fmt.Printf(,i,v) } s:=testArray[:] i1,v1:=s{ fmt.Printf(,i1,v1) } fmt.Printf(,cap(s),len(s)) } 測試結果為: [0 1 2 3] 9 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 0 3 1 4 2 5 3 6 4 7 the s cap's 7 the s len's 5 slice 倒序: package main import "fmt" func main(){ var testArray [10]int=[10]int {0,1,2,3,4,5,6,7,8,9} fmt.Println(testArray[0:4]) fmt.Println(testArray[len(testArray)-1]) for i,v:=range testArray { fmt.Printf("%d %d\n",i,v) } s:=testArray[3:8] for i1,v1:=range s{ fmt.Printf("%d %d\n",i1,v1) } fmt.Printf("the s cap's %d\nthe s len's %d\n",cap(s),len(s)) // reserse the slice fmt.Println("before reserse ",s) reserse(s) fmt.Println("after reserse",s) } func reserse(s []int){ for i,j:=0,len(s)-1;i<j;i,j = i+1,j-1 { //for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { s[i],s[j]=s[j],s[i] } } 輸出: 。。。 before reserse [3 4 5 6 7] after reserse [7 6 5 4 3]
檢查slice是否為空的兩種方式,直接和nil比較,還有一個是判斷slice長度為空
testNil []int testNil==nil { fmt.Println() } len(testNil)=={ fmt.Println() }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14904226/viewspace-2213475/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Golang 陣列和切片 Slice 和 Map 使用Golang陣列
- JavaScript 陣列 slice()JavaScript陣列
- JavaScript 陣列slice()JavaScript陣列
- golang基礎之陣列Golang陣列
- JavaScript陣列之傻傻分不清系列(split,splice,slice)JavaScript陣列
- JavaScript陣列裡的slice和spliceJavaScript陣列
- golang陣列分割Golang陣列
- web前端培訓之Javascript如何改變陣列的長度?Web前端JavaScript陣列
- go(golang)之slice的小想法1Golang
- Javascript如何改變陣列的長度?JavaScript陣列
- Golang Slice技巧Golang
- golang 陣列去重 移除陣列指定元素Golang陣列
- 關於Java的小知識集合之 ArrayList可變長陣列Java陣列
- golang中判斷兩個slice是否相等與判斷值下的 陣列是否相等Golang陣列
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- Go的100天之旅-06陣列和SliceGo陣列
- Vue原始碼解析之陣列變異Vue原始碼陣列
- golang-陣列基本使用Golang陣列
- golang實現稀疏陣列Golang陣列
- (二)golang陣列和切片Golang陣列
- golang 陣列面試題Golang陣列面試題
- Golang陣列注意細節Golang陣列
- 陣列二:使用陣列可變函式為陣列排序陣列函式排序
- golang slice 和 string 重用Golang
- Golang 陣列和字串之間的相互轉換[]byte/stringGolang陣列字串
- 重寫陣列的方法(改變原陣列)陣列
- golang切片和陣列的區別Golang陣列
- 使用delete刪除陣列,其長度會改變嗎?delete陣列
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- 吐槽Javascript系列二:陣列中的splice和slice方法JavaScript陣列
- 陣列的操作-變形陣列
- Golang切片和陣列底層詳解Golang陣列
- 當心 Collection 的 slice 方法,它會偷偷修改你的陣列陣列
- 慎用JS中的slice()、concat()和assign()方法來複制陣列JS陣列
- C++陣列長度C++陣列
- 字元陣列的長度字元陣列
- Golang slice 從原始碼來理解Golang原始碼
- web前端陣列處理之陣列去重Web前端陣列