日常 Go語言聖經 Slice切片習題

2021-09-27 09:05:58 字數 1892 閱讀 4867

1.slice(切片)代表變長的序列,序列中每個元素都有相同的型別,乙個slice型別一般寫作t,其中t代表slice中元素的型別;slice的語法和陣列很像,只是沒有固定長度而已,slice的底層確實引用乙個陣列物件

2.內建的len和cap函式分別返回slice的長度和容量

3.s[i:j] , 從第i個元素開始到第j-1個元素的子串行,s[:]切片操作則是引用整個陣列

4.slice值包含指向第乙個slice元素的指標,因此向函式傳遞slice將允許在函式內部修改底層陣列的元素

5.將slice元素迴圈向左旋轉n個元素的方法是三次呼叫reverse反轉函式,第一次是反轉開頭的n個元素,然後是反轉剩下的元素,最後是反轉整個slice的元素。

6.slice之間不能比較,因此我們不能使用==操作符來判斷兩個slice是否含有全部相等元素,slice唯一合法的比較操作是和nil比較

7.可以用int(nil)型別轉換表示式來生成乙個對應型別slice的nil值

8.測試乙個slice是否是空的,使用len(s) == 0來判斷

9.make函式建立乙個指定元素型別、長度和容量的slice , make(t, len)

11.rune("hello, 世界")  字串轉rune型別的slice

14.報錯invalid indirect of s[j] (type int) ,使用陣列指標的時候(*s)[0]

15.slice記憶體技巧,

練習 4.3: 重寫reverse函式,使用陣列指標代替slice。

練習 4.4: 編寫乙個rotate函式,通過一次迴圈完成旋轉。

練習 4.5: 寫乙個函式在原地完成消除string中相鄰重複的字串的操作。

練習 4.7: 修改reverse函式用於原地反轉utf-8編碼的byte。是否可以不用分配額外的記憶體?

package main

import(

"fmt"

"unicode"

)func main()

//reverse(&testarr)

fmt.println(testarr)

a:=rotate(testarr[:],2)

fmt.println(a)

b:=string

emptystring(b)

d:=byte("abc bcd wer sdsd taoshihan de")

e:=emptystring2(d)

fmt.println(string(e))

f:=byte("abc bcd wer sdsd taoshihan de")

reverse1(f)

fmt.println(string(f))}/*

練習 4.3: 重寫reverse函式,使用陣列指標代替slice。

*/func reverse(s *[5]int)

res[i] = s[index]

}

return res }/*

練習 4.5:寫乙個函式在原地完成消除string中相鄰重複的字串的操作。

*/func emptystring(s string)string

if v != s[index]

}fmt.println(s[:i])

return s[:i]}/*

*/func emptystring2(s byte)byte

if unicode.isspace(rune(s[i])) && unicode.isspace(rune(s[index]))

}return s}/*

練習 4.7: 修改reverse函式用於原地反轉utf-8編碼的byte。是否可以不用分配額外的記憶體?

*/func reverse1(s byte)

}

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...