• 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!!!
  • 相关阅读:
    Borladn传奇终结巨人倒下了
    C#数据导出到excel
    ADO.NET Entity Framework学习笔记(4)ObjectQuery对象
    ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转]
    在Vista,WIN2K8下IE7.0就不能正常访问asp.net development server解决办法
    获取SQL Server表字段的各种属性
    白话说.net事件和委托
    Ado.Net Entity : Object doesn’t display linked members (foreign keys)
    移动飞信WEB发送服务接口
    asp.net FormsAuthentication 认证
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15191224.html
Copyright © 2020-2023  润新知