首页 > 技术文章 > 切片

xiongying4 2019-12-11 19:36 原文

定义

切片是由数组建立的一种方便、灵活且功能强大的包装(Wrapper)。切片本身不拥有任何数据。它们只是对现有数组的引用。

定义切片第一种方法

package main

import "fmt"

func main(){
    var a = [8]int{1,2,3,4,5,6}
    var b = a[1:5]
    fmt.Println(b)  // 打印结果:[2 3 4 5]
}

 

切片的修改(根据索引修改)

package main

import "fmt"

func main(){
    var a = [8]int{1,2,3,4,5,6}

    a[2] = 50
    fmt.Println(a)  // 打印结果:[1 2 50 4 5 6 0 0]
}

切片的长度和容量

切片的长度是切片中的元素数。切片的容量是从创建切片索引开始的底层数组中元素数。

package main

import "fmt"

func main(){
    var a [9]int = [9]int{1,2,3,4,5,6}
    var b []int = a[2:5]
    fmt.Println(len(b))  // 索引2:5的值为3位,所以打印结果为3
    fmt.Println(cap(b))  // 容量是从索引第二位开始,索引打印结果为7
}

定义并初始化切片(通过make创建)

func make(len,cap)通过传递类型,长度和容量来创建切片。容量是可选参数, 默认值为切片长度。make 函数创建一个数组,并返回引用该数组的切片。

package main

import "fmt"

func main(){

    var a[]int = make([]int,3)
    fmt.Println(a)
}

切片追加值(内置函数append)

package main

import "fmt"

func main(){

    var a [8]int = [8]int{1,2,3,4,5,6}
    var b[]int = a[2:6]
    b = append(b,666)
    fmt.Println(b)  // 打印结果:[3 4 5 6 666]  直接在切片值得后面追加值

}

切片的函数传递

package main

import "fmt"

func main(){



    var b =make([]int,3,4)
    test(b)
    fmt.Println(b)

}
func test(b []int)  {
    b[0]=999
    fmt.Println(b)
}

切片在内部可由一个结构体类型表示

type slice struct {  
    Length        int
    Capacity      int
    ZerothElement *byte
}

多维切片

类似于数组,切片可以有多个维度。

package main

import "fmt"

func main(){
    var a[][]string = make([][]string,2,3)
    fmt.Println(a[0])
    if a[0] == nil{
        fmt.Println("")
    }
}

copy函数

package main

import "fmt"

func main(){

    var a=make([]int,3,100)
    a[0] = 66
    a[1] = 99
    fmt.Println(a)
    var b =make([]int,3,4)
    fmt.Println(b)
    copy(b,a)  //b复制a的值
    fmt.Println(b)
}

推荐阅读