真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go(3[切片])

切片:

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、安源ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的安源網(wǎng)站制作公司

  • 切片底層都是數(shù)組

  • 切片是一個(gè)指針類型,是數(shù)組的引用!

  • 修改切片后的值,那原來(lái)的數(shù)據(jù)也會(huì)改變

  • 傳輸數(shù)據(jù)大的時(shí)候,使用切片,節(jié)省內(nèi)存,因?yàn)榈讓又皇菍?duì)數(shù)組的引用

  • append操作的適合,如果長(zhǎng)度超過(guò)設(shè)置的長(zhǎng)度,那底層就會(huì)把底層元組進(jìn)行擴(kuò)容

  • 切片里面可以放任何類型?。?!

切片初始化:

    var b[]int = []int{1,2,3,4,5}

  • 切片底層都是數(shù)組

  • 切片是一個(gè)指針類型,應(yīng)用類型,是數(shù)組的引用?。?!

  • 修改切片后的值,那原來(lái)的數(shù)據(jù)也會(huì)改變

  • 如果傳輸?shù)膬?nèi)容過(guò)大,介意用切片,節(jié)省內(nèi)存

切片定義(代碼):

    切片是數(shù)組的引用,所以先創(chuàng)建一個(gè)數(shù)組

    var a [5]int

    var b[]int = a[0:2]       b是切片    

偽代碼定義:

    a[start:end]

示例

  1. 示例一: 循環(huán)數(shù)組

    1. 時(shí)刻記住go是強(qiáng)類型語(yǔ)言,變量后面需要指定類型

    2. func Sum(a [100]int)int  {
         c:=0
         for i:=0;i

  2. 示例二:循環(huán)切片

    1. 其實(shí)與循環(huán)數(shù)組方式一樣

    2. 需要注意是傳參的時(shí)候,需要把數(shù)組轉(zhuǎn)化為切片

      1. var c[1000] int  轉(zhuǎn)化為切片就是 c[:]

    3. func Sum2(a []int)int  {
         c:=0
         for i:=0;i

字符串切片:

//一個(gè)bytes占一個(gè)字節(jié)  一個(gè)字節(jié)是8位
//一個(gè)字符--》有可能占一個(gè)字節(jié),或者三個(gè)字節(jié)
//一個(gè)中文,占3個(gè)字節(jié)

字符串底層是bytes的切片,   是用指針指向utf-8字節(jié)數(shù)組??!

字符串是只讀的??!,所以需要把字符串轉(zhuǎn)切片,然后在修改字符串,那就相當(dāng)于開(kāi)辟一塊新的內(nèi)存空間

修改字符串,可將其轉(zhuǎn)化成【】rune或[]bytes ,完成后在轉(zhuǎn)化為string ,無(wú)論哪種方式,都會(huì)重新分配內(nèi)存,并復(fù)制字節(jié)數(shù)組

var str = "hello word"
//把字符串轉(zhuǎn)切片,然后在修改字符串
str1 := str[:]
fmt.Printf("%s\n",str1)
//單引號(hào)是代表一個(gè)字符
var b []byte = []byte(str)
//通過(guò)下標(biāo)重新賦值
b[0] = 'a'
str2 := string(b)
fmt.Println(str2,len(b))

示例一:

func testRever()  {
   //英文反轉(zhuǎn)
   var str = "hello word"
   var b []byte = []byte(str)
   for i:=0;i< len(b) /2 ;i++{
      b[i] = b[len(b) -i -1]
      b[len(b) -i -1] = b[i]

   }
   str2 := string(b)
   fmt.Println(str2,len(b))
}

實(shí)例二:

中文操作:rune 

func testChina()  {
   //帶中文的反轉(zhuǎn)
   str :="Hi  我愛(ài)晨紅"
   //rune 可能占一個(gè)字節(jié)或者多個(gè)字節(jié)
   b :=[]rune(str)
   fmt.Println("testChina",len(str),len(b))
   for i:=0;i< len(b) /2 ;i++{
      b[i],b[len(b) -i -1] = b[len(b) -i -1],b[i]
   }
   str2 := string(b)
   fmt.Println("testChina",str2)
}
func testConetChine()  {
   //統(tǒng)計(jì)中文,和英文出現(xiàn)的次數(shù)
   str :="翟hello,worker"
   b :=[]rune(str)
   fmt.Println("testChina",len(str),len(b))
}

>>>>testChina 17 13

得出!!當(dāng)統(tǒng)計(jì)類型為字符串的適合,它會(huì)把每個(gè)值都當(dāng)成一個(gè)字節(jié)來(lái)統(tǒng)計(jì)

    轉(zhuǎn)換rune后,那統(tǒng)計(jì)rune后的值,長(zhǎng)度就變化了

實(shí)例三:

func testConetChine()  {
   //統(tǒng)計(jì)中文,和英文出現(xiàn)的次數(shù)
   str :="哈哈哈哈測(cè)試,hello,worker"
   b :=[]rune(str)
   fmt.Println("testChina",len(b),len(str))

}

切片的創(chuàng)建:

  1. 第一種定義方式:定義切片的時(shí)候.默認(rèn)是空 nil

    1. var a[]int
      a = append(a,1,2,3,7,8)
      fmt.Printf("%#v\n",a)
  2. 第二種定義方式:用make的時(shí)候,切片內(nèi)容默認(rèn)都是0,底層是有數(shù)據(jù)的
    1. a=make([]int,5)
      a = append(a,1,2,3,7,8)
      fmt.Printf("%#v\n",a)
  • 切片只能用make來(lái)創(chuàng)建

  • 底層還是數(shù)組,是make來(lái)創(chuàng)建的

  • //容量擴(kuò)容原理

    • 示例:

      • func testSliceCap()  {
        
           //a切片長(zhǎng)度為5,容量為10,那底層數(shù)組長(zhǎng)度就是10
           //那b 可以在a的基礎(chǔ)上擴(kuò)容, 但是不能超容量10
           a := make([]int,5,10)
           a[4] = 100
           //容量是從1開(kāi)始,所以現(xiàn)在 b:=a[1:3] 的容量是9
           b:=a[1:3]
           //b[9] = 100
        
           fmt.Printf("a=%#v\n",a)
           fmt.Printf("b=%#v\n",b)
           //cap 內(nèi)置方法 求出切片的容量7
           fmt.Println(cap(a),cap(b))
        }

切片Copy:

    copy(目標(biāo)切片,源切片) 

  1. 打印內(nèi)存地址參數(shù):p

  2. cap 切片容量

s1 :=[]int{1,2,3}
s2 :=make([]int,10)
copy(s2,s1)
fmt.Println("\n",s1)
fmt.Println("\n",s2,cap(s2))

>------
 [1 2 3]

 [1 2 3 0 0 0 0 0 0 0] 10

切片Append:


定義切片: s3 :=[]int{1,2,3}

s4:=append(s3,3,4,5,6)


數(shù)組 / 切片 中的 ... 使用

數(shù)組:

func testArray()  {
   var a [5]int = [5]int{1,3}
   fmt.Println(a)
   //數(shù)組的...  是系統(tǒng)內(nèi)部幫你計(jì)算,當(dāng)你不知道有多少個(gè)的時(shí)候,那就用...
   var c  = [...]int{1,3,4}
   fmt.Println(c)
}

切片:

2個(gè)切片的append

//... 就是展開(kāi)切片的意思

a = make([]int,5)
var b[] = []int{1,3,6,10}
a = append(a,b...)



網(wǎng)站題目:Go(3[切片])
鏈接地址:http://weahome.cn/article/jhjshh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部