溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

GO之?dāng)?shù)組切片

發(fā)布時間:2020-07-01 05:48:52 來源:網(wǎng)絡(luò) 閱讀:624 作者:DBAspace 欄目:編程語言
數(shù)組的容量和長度是i樣的,cap()函數(shù)和len()函數(shù)均輸出數(shù)組的容量(即長度)
package main
import "fmt"
func main() {
    a := [5]int{6, 7, 8, 9, 10}
    fmt.Println(len(a))
    fmt.Println(cap(a))
}

切片

-本身并不是數(shù)組,它指向底層的數(shù)組

-作為變長數(shù)組的替代方案,可以關(guān)聯(lián)底層數(shù)組的局部或全部

-為引用類型

-使用len()獲取元素的個數(shù),cap()獲取容量

-一般使用make()創(chuàng)建

-如果多個slice指向相同底層數(shù)組,其中一個的值改變會影響全部

-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] //包含開始不包含結(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)

}

--從一個slice取出一個新的slice

Reslice:從一個slice取出一個新的slice

Reslice時索引被slice的切片為準(zhǔn)

索引不可以超過被slice的切片的容量cap()值

索引越界不會導(dǎo)致底層數(shù)組的重新分配而是引發(fā)錯誤

Append

可以在slice尾部追加元素

可以將一個slice追加在另一個slice尾部

如果最終未超過追加到slice的容量則返回原始slice//內(nèi)存地址沒有改變

如果超過追加到的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ù)組拷貝到長的數(shù)組,改變長的幾個

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) //長的數(shù)組拷貝到短的數(shù)組中去,只會匹配短的個數(shù)長度

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ù)制的值超過被復(fù)制的數(shù)組,只會留下部分復(fù)制的數(shù)據(jù),s1的值只會在s2留下一個

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語言中,未使用的值會導(dǎo)致編譯錯誤,只有一個元素時,該元素代表索引,在元素遍歷中,是不能直接修改,主要是因?yàn)橹祩鬟f,為該切片元素的副本,修改它不會影響原本值,只有修改的是該切片的元素引用的值,才可以修改

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

go
AI