• 8.26Go之容器之多维切片


    8.26Go之容器之多维切片

    特点

    多维切片和多维数组类似

    声明语法格式:

    var sliceName [][]...[]sliceType
    • sliceName 为切片的名字

    • sliceType为切片的类型

    • 每个[ ]代表着一个维度,切片有几个维度就需要几个[ ]

    示例:

    package main

    import "fmt"

    func main() {
    /*声明一个多维数组*/
    var multiarray [][]int

    //给多维数组赋值
    multiarray = [][]int{{10}, {100,200}}

    fmt.Println(multiarray)

    fmt.Println(multiarray[0][0])

    fmt.Println(multiarray[1][0])
    fmt.Println(multiarray[1][1])

    fmt.Println(cap(multiarray)) //容量为2
    fmt.Println(len(multiarray[0])) //多维数组的零号索引处的长度为1
    fmt.Println(len(multiarray[1])) //多维数组的一号索引处的长度为2
    }

    内存层面上剖析多维数组

    分析:

    • 声明两个长度区域的切片空间

    • 零号索引处赋值为一个单位长度的切片空间

    • 一号索引处赋值为两个单位长度的切片空间

    组合切片的切片

    特点分析:

    • 由于多维切片每个索引处均是一个切片空间,所以再使用内置函数append()给切片增加元素的时候

    • 要精确到最小维度

    示例:

    package main

    import "fmt"

    func main() {
    /*声明一个二维切片*/
    slice := [][]int{{10}, {100, 200}}

    fmt.Println(len(slice))
    fmt.Println(cap(slice))

    /*再第二维度的零号索引处添加一个元素30*/
    slice[0] = append(slice[0], 30) //这里的索引位置要当作数组的索引位置来看待

    fmt.Println(slice)
    fmt.Println(len(slice))
    fmt.Println(cap(slice))
    }

    代码分析:

    • 先增长切片

    • 再将新的整型切片赋值给外层切片的第一个元素

    • 再将切片复制到外层切片的索引为 0 的元素

    操作时会涉及众多的布局和值,在函数间这样传递数据结构会很复杂,切片本身结构很简单

    It's a lonely road!!!
  • 相关阅读:
    [转]cmd-bat批处理命令延时方法
    chrome pyv8下载
    win10锁屏壁纸路径
    MongoDB系列—— Window 搭建Mongodb 集群
    JS判断所有IE浏览器所有版本
    网页中引用优酷视频默认自动播放超清
    SQL 还原或备份失败数据库变成单个用户模式无法访问
    百度webuploader 上传演示例子
    SQL Server 如何更改SQL Server和windows身份方式验证
    已经阻止此发布者在你的计算机上运行软件
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15191224.html
Copyright © 2020-2023  润新知