數(shù)組的容量和長(zhǎng)度是i樣的,cap()函數(shù)和len()函數(shù)均輸出數(shù)組的容量(即長(zhǎng)度) package main
import "fmt"
func main() {
a := [5]int{6, 7, 8, 9, 10}
fmt.Println(len(a))
fmt.Println(cap(a))
}
切片
創(chuàng)新互聯(lián)專(zhuān)注于五臺(tái)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供五臺(tái)營(yíng)銷(xiāo)型網(wǎng)站建設(shè),五臺(tái)網(wǎng)站制作、五臺(tái)網(wǎng)頁(yè)設(shè)計(jì)、五臺(tái)網(wǎng)站官網(wǎng)定制、成都小程序開(kāi)發(fā)服務(wù),打造五臺(tái)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供五臺(tái)網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
-本身并不是數(shù)組,它指向底層的數(shù)組
-作為變長(zhǎng)數(shù)組的替代方案,可以關(guān)聯(lián)底層數(shù)組的局部或全部
-為引用類(lèi)型
-使用len()獲取元素的個(gè)數(shù),cap()獲取容量
-一般使用make()創(chuàng)建
-如果多個(gè)slice指向相同底層數(shù)組,其中一個(gè)的值改變會(huì)影響全部
-make([]T,len,cap)
-其中cap 可以省略,則和len的值相同
package main
import "fmt"
func main(){
var s1[10]int
s1:=[10]int{1,2,3,4,5,6,7,8,9}
fmt.Println(s1)
s2 :=s1[:9]
s3 :=s1[4:8] //包含開(kāi)始不包含結(jié)束
fmt.Println(s2)
}
使用make聲明數(shù)組
s1 :=make([]int,3,9)
package main
import "fmt"
func main(){
s1 :=make([]int,3,10)
fmt.Println(s1)
}
--從一個(gè)slice取出一個(gè)新的slice
Reslice:從一個(gè)slice取出一個(gè)新的slice
Reslice時(shí)索引被slice的切片為準(zhǔn)
索引不可以超過(guò)被slice的切片的容量cap()值
索引越界不會(huì)導(dǎo)致底層數(shù)組的重新分配而是引發(fā)錯(cuò)誤
Append
可以在slice尾部追加元素
可以將一個(gè)slice追加在另一個(gè)slice尾部
如果最終未超過(guò)追加到slice的容量則返回原始slice//內(nèi)存地址沒(méi)有改變
如果超過(guò)追加到的slice的容量則將重新分配數(shù)組并拷貝原始數(shù)據(jù)//重新分配內(nèi)存地址
package main
import "fmt"
func main(){
s1 :=make([]int,3,6)
fmt.Println("%v %p\n",s1,s1)
s1=append(s1,1,2)
fmt.Println("%v %p\n",s1,s1)
}
Copy
package main
import "fmt"
func main(){
s1 :=[]int{1,2,3,4,5,6,7}
s2 :=[]int{7,8,9}
copy(s1,s2) //s2的內(nèi)容拷貝到s1中去,短的數(shù)組拷貝到長(zhǎng)的數(shù)組,改變長(zhǎng)的幾個(gè)
fmt.Println(s1)
}
package main
import "fmt"
func main(){
s1 :=[]int{1,2,3,4,5,6,7}
s2 :=[]int{7,8,9}
copy(s2,s1) //長(zhǎng)的數(shù)組拷貝到短的數(shù)組中去,只會(huì)匹配短的個(gè)數(shù)長(zhǎng)度
fmt.Println(s2)
}
package main
import "fmt"
func main(){
s1 :=[]int{1,2,3,4,5,6,7}
s2 :=[]int{7,8,9}
copy(s2[2:2],s1[1:3])//拷貝到s2的指定并覆蓋原有的數(shù)據(jù)
fmt.Println(s2)
}
package main
import "fmt"
func main(){
s1 :=[]int{1,2,3,4,5,6,7,1,1,1}
s2 :=[]int{7,8,9,11,22,33,44,55,66,77,88}
copy(s2[10:],s1[1:3])//拷貝到s2的指定并覆蓋原有的數(shù)據(jù).若復(fù)制的值超過(guò)被復(fù)制的數(shù)組,只會(huì)留下部分復(fù)制的數(shù)據(jù),s1的值只會(huì)在s2留下一個(gè)
fmt.Println(s2)
fmt.Println(s1[1:3])
}
##遍歷、修改切片
package main
import "fmt"
func main() {
slice0 := []string{"a", "b", "c", "d", "e", "f"}
fmt.Printf("\n*****元素遍歷*****")
for _, value := range slice0 {
fmt.Println(value, " ")
}
fmt.Println("\n*****索引遍歷******")
for index := range slice0 {
fmt.Println(index, slice0[index])
}
fmt.Println("\n******元素索引共同使用******")
for index, value := range slice0 {
fmt.Println(value, slice0[index])
}
fmt.Println("\n******修改******")
for index := range slice0 {
slice0[index] = "9"
}
fmt.Println(slice0)
}
###注意:使用 “_” 則表示忽略,因?yàn)間o語(yǔ)言中,未使用的值會(huì)導(dǎo)致編譯錯(cuò)誤,只有一個(gè)元素時(shí),該元素代表索引,在元素遍歷中,是不能直接修改,主要是因?yàn)橹祩鬟f,為該切片元素的副本,修改它不會(huì)影響原本值,只有修改的是該切片的元素引用的值,才可以修改
網(wǎng)站題目:GO之?dāng)?shù)組切片
路徑分享:http://m.2m8n56k.cn/article32/jcgspc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、響應(yīng)式網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、App設(shè)計(jì)、微信小程序、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)