(五)go语言数组和切片

举报
Nick Qiu 发表于 2020/10/23 12:28:55 2020/10/23
【摘要】 go语言数组package mainimport "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)...

go语言数组

package mainimport "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:]
  • 底层结构

  • 获取slice的长度和容量

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

例子

package mainimport (    "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)
    
}


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。