陣列和切片4

2022-08-27 12:45:10 字數 2039 閱讀 7429

切片的遍歷和陣列一樣,也有兩種方式

1)for 迴圈常規方式遍歷

2)for-range 結構遍歷切片

兩種方式都在下面的**裡:

案例演示:

func main()

slice := arr[1:4] // 20, 30, 40

for i := 0; i < len(slice); i++

fmt.println()

//使用for--range 方式遍歷切片

for i, v := range slice

}切片初始化時 var slice = arr[startindex:endindex]

說明:從arr 陣列下標為startindex,取到下標為endindex的元素,不含arr[endindex]。

切片初始化時,仍然不能越界。範圍在 [0-len(arr)] 之間,但是可以動態增長。

1)var slice = arr[0:end] 可以簡寫 var slice = arr[:end]

2)var slice = arr[start:len(arr)] 可以簡寫: var slice = arr[start:]

3)var slice = arr[0:len(arr)] 可以簡寫: var slice = arr[:]

cap是乙個內建函式,用於統計切片的容量,即最大可以存放多少個元素。

切片定義完後,還不能使用,因為本身是乙個空的,需要讓其引用到乙個陣列,或者make乙個空間供切片來使用

切片可以繼續切片

func main()

fmt.println("slice3=", slice3)

}2)go底層會建立乙個新的陣列newarr(按照擴容後大小)

3)將slice原來包含的元素拷貝到新的陣列newarr

4)slice重新引用到newarr

5)注意newarr是在底層來維護的,程式設計師不可見

6)案例演示說明:

切片的拷貝操作:

切片使用copy內建函式完成拷貝,舉例說明:

func main()

var slice5 = make(int, 10)

copy(slice5, slice4)

fmt.println("slice4=", slice4)

fmt.println("slice5=", slice5)

}對上面**的說明:

(1)copy(para1, para2):引數的資料型別都是切片型別。

(2)按照上面的**來看,slice4和slice5的資料空間是獨立的,相互不影響,也就是說 slice4[0]=999,slice5[0] 仍然是1。

思考題:下面的**有沒有錯誤:

var a int = int

var slice = make(int, 1)

fmt.println(slice)   //0

copy(slice, a)   //這裡是不會報長度不夠這個錯的,雖然長度只有1。長度有多大,就拷貝幾個值過來

fmt.println(slice)   //1

說明:上面的**沒有問題,可以執行,最後輸出的結果是

1)string底層是乙個byte陣列,因此string也可以進行切片處理

案例演示:

func main()

2)string和切片在記憶體的形態,以「abcd」 畫出記憶體示意圖

3)string是不可變的,也就說不能通過 str[0] = 'z' 方式來修改字串

4)如果需要修改字串,可以先將string -> byte / 或者 rune -> 修改 -> 重寫轉成string

func main()

陣列,切片和字典

1 陣列 array 陣列是乙個有相同資料型別的元素組成的固定長度的有序集合,如 var x 5 int,使用var定義的陣列,預設值如果整型為0,浮點型為0.0,字串為 物件為nil。求整型陣列之和,使用range函式,遍歷陣列 切片 字典時,返回索引和元素值 當對某個返回值不感興趣時,要用下劃線...

golang 陣列和切片

陣列和切片的建立func main output 1 0 ps 陣列宣告時,所有元素預設值都是0。一般很少這樣做,盡量自己初始化。func main output panic runtime error index out of range goroutine 1 running main.main...

Go 陣列和切片

陣列擷取 a 開始索引位置,結束索引 切片 slice 是本身並非動態陣列和陣列指標,通過內部指標指向底層陣列。建立乙個length和capacity都等於5的slice slice make int,5 length 3,capacity 5的slice slice make int,3,5 建立...