筆記 go語言 (Slice)切片的概念

2022-09-18 20:57:11 字數 1757 閱讀 1211

//切片是什麼,定義乙個arr,定義乙個s為arr中的2到6,這個s就是乙個切片

arr := [...]int

s := arr[2:6]//半開半閉區間,值為[2 3 4 5]

//下面的都是slice

fmt.println("arr[2:6]=", arr[2:6])//[2 3 4 5]

fmt.println("arr[:6]=", arr[:6])//[0 1 2 3 4 5]

fmt.println("arr[2:]=", arr[2:])//[2 3 4 5 6 7]

fmt.println("arr[:]=", arr[:])//[0 1 2 3 4 5 6 7]

slice實際上是array的乙個view,是乙個檢視,對資料進行改動的時候,原始資料也會進行改變,在slice上面還可以建slice

//slice本身沒有資料,是對底層array的乙個view

arr := [...]int

s := arr[2:6]

s [0] = 10//arr的值變為[0 1 10 3 4 5 6 7]

slice的層疊

//在slice上面還可以建slice

s :=arr[2:6]

s = s[:3]

s = s[1:]

s = arr[:]

slice的擴充套件

//slice的擴充套件

arr := [...]int

s1 := arr[2:6]//正常取值[2 3 4 5]

s2 := s1[3:5]//一樣可以取到值[5 6]

原因:slice的可擴充套件性,在arr中的陣列中的數值,s1進行取值的時候是進行下標的對比,實際上的在s1的下標中,4和5是對應arr中的6和7的,只不過沒有顯示出來,在s2取值的時候也是進行s2的下標對比,所以就取到了隱藏的下標的對應的值(感覺越說越亂)

slice可以向後擴充套件,但是不能向前擴充套件

底層就是array,ptr是指向陣列中值的位置,len是slice檢視的資料,cap是底層陣列的長度

需要注意,s[i]不可以超越len(s),向後擴充套件不可以超越底層陣列cap(s)

//顯示

arr = [...]int

s1 = arr[2:6]

s2= s1[3:5]

fmt.printin(s1[:cap(s1)])

fmt.printf("s1=%v, len(s1)=%d, cap(s1)=%d",s1, len(s1), cap(s1))

fmt.printin("\n")

fmt.printin(s2[:cap(s2)])

fmt.printf("s2=%v, len(s2)=%d, cap(s2)=%d",s2, len(s2), cap(s2))

fmt.println("\n")

Go語言切片 Slice

python裡面切片是一種操作,用於取list裡面元素。而go語言的切片則是一種資料型別,而不是一種操作。go語言中提供了切片 slice 作為一種更為靈活 功能強悍的內建型別,它其實是陣列的一種抽象。切片的原始碼 type slice struct slice是原陣列在記憶體中的位址的乙個指標,它...

Go語言核心 slice切片

slice是長度可變的元素序列 陣列不可變 每個元素都有相同的型別。slice型別寫作t,其中t代表slice中的元素型別 slice和陣列寫法很像,只是沒有指定長度。陣列和slice之間的聯絡非常緊密。slice是非常輕量的資料結構,它是引用型別,指向底層的乙個陣列,該陣列被稱之為slice的底層...

go語言基礎 切片 slice

理解為變長的陣列 a 切片建立 s1 int s2 make t,len,cap arr 5 int s3 arr start end 切割陣列 start,end s4 arr b 切片的型別 資料型別 切片屬於引用型別 s1 int s2 s1 packagemain import fmt fu...