美文网首页
(五)go语言数组和切片

(五)go语言数组和切片

作者: Nick_4438 | 来源:发表于2020-10-26 21:17 被阅读0次

    go语言数组

    package main
    
    import "fmt"
    
    func main()  {
        var arr1 [] int
        //初始化
        arr2 := [3]int {1,2,5}
        //编译器来确定个数
        arr3 := [...]int {2,3,4,6,7}
        //二位数组
        var grid[4][5] int
    
        fmt.Println(arr1)
        fmt.Println(arr2)
        fmt.Println(arr3)
        fmt.Println(grid)
    
        //数组遍历方法1
        fmt.Println("..........arr3:",arr3)
        for i:=0 ; i<len(arr3);i++{
            fmt.Println(arr3[i])
        }
        //数组遍历方法2
        fmt.Println("..........arr3:",arr3)
        for i,v := range arr3 {
            fmt.Println(i, v)
        }
        //数组遍历方法3,省略变量
        fmt.Println("..........arr3:",arr3)
        for _,v := range arr3 {
            fmt.Println(v)
        }
        //数组遍历方法3,省略变量
        fmt.Println("..........arr3:",arr3)
        for _,v := range arr3 {
            fmt.Println(v)
        }
    
    }
    
    

    函数调用数组的时候 [10]int 和[20]int是不同类型
    调用func f (arr [10] int)会拷贝数组
    go语言一般不直接使用数组,而是使用切片

    go语言切片

    • 切片本身没有数据,切片是对底层数据的一个view
    • 改变切面数据内容的值,底层数据的值也会改变
    • slice可以嵌套多层使用
    s := arr[2:6]
    s = s[:3]
    s = s[1:]
    
    • 底层结构
      [图片上传失败...(image-c0294c-1603718212405)]
      [图片上传失败...(image-ea0069-1603718212405)]

    • 获取slice的长度和容量

    fmt.Printf("s3=%v, len(s3)=%d, cap(s3)=%d",s3,len(s3),cap(s3))
    
    • append可以在slice后面加数据

    例子

    package main
    
    import (
        "fmt"
    )
    
    func printSlice(s [] int)  {
        fmt.Printf("%v, len=%d,cap=%d\n",s, len(s),cap(s))
    }
    func main() {
        //创建slcie
        var s [] int    //Zero value for slice is nil
        for i:=0 ; i<100 ; i++  {
            printSlice(s)
            s = append(s, 2 * i + 1)
        }
        fmt.Println(s)
    
        s1 := [] int {2,4,6,8}
        printSlice(s1)
        //使用内置函数创建slice
        s2 := make([]int ,16)
        s3 := make([]int ,16,20)
        printSlice(s2)
        printSlice(s3)
    
        fmt.Println("copy slice")
        //  slice拷贝
        copy(s2,s1)
        fmt.Println(s2)
    
        fmt.Println("delete element from slice ")
        //删除掉第三个元素
        s2 = append(s2[:3] ,s2[4:]...)
        printSlice(s2)
        //从头删除
        font := s2[0]
        s2 = s2[1:]
        fmt.Println("font=",font)
        printSlice(s2)
        //从尾巴删除
        tail := s2[len(s2)-1]
        s2 = s2[:len(s2)-1]
        fmt.Println("tail=",tail)
        printSlice(s2)
        
    }
    
    

    相关文章

      网友评论

          本文标题:(五)go语言数组和切片

          本文链接:https://www.haomeiwen.com/subject/agvmmktx.html