zoukankan      html  css  js  c++  java
  • Go语言中数组的内部实现和基础功能

    数组的内部实现和基础功能

    因为数组是切片和映射的基础数据结构。理解了数组的工作原理,有助于理解切片和映射提供的优雅和强大的功能。

    内部实现

    在Go语言里,数组是一个长度固定的数据类型,用于存储一段具有相同的类型的元素的连续块。
    下图中可以到数组的表示。

    数组是一种非常有用的数据结构,因为其占用的内存是连续分配的。由于内存连续,CPU能把正在使用的数据缓存更久的时间。而且内存连续很容易计算索引,可以快速迭代数组里的所有元素。数组的类型信息可以提供每次访问一个元素时需要在内存中移动的距离。

    声明和初始化

    声明数组时需要指定内部存储的数据的类型,以及需要存储的元素的数量,这个数量也称为数组的长度,如下:

    // 声明一个包含5个元素的整型数组
    var array [5]int
    

    一种快速创建数组并初始化的方式是使用数组字面量。

    array := [5]int{10,20,30,40,50}
    

    使用数组

    要访问数组里某个单独元素,使用[]运算符,如:

    // 声明一个包含5个元素的整型数组
    // 用具体值初始化为每个元素
    array := [5]int{10,20,30,40,50}
    
    // 修改索引为2的元素的值
    array[2] = 35
    

    使用*运算符就可以访问元素指针所指向的值,如:

    // 声明包含5个元素的指向整数的数组
    // 用整型指针初始化索引为0和1的数组元素
    array := [5]*int{0: new(int), 1: new(int)}
    
    // 为索引为0和1的元素赋值
    *array[0] = 10
    *array[1] = 20
    

    在Go语言里,数组是一个值。这意味着数组可以用在赋值操作中。变量名代表整个数组,因此,同样类型的数组可以赋值给另一个数组:

    // 声明一个包含5个元素的字符串数组
    var array1 [5]string
    
    // 声明第二个包含5个元素的字符串数组
    // 用颜色初始化数组
    array2 := [5]string{"Red","Blue","Green","Yellow","Pink"}
    
    // 把array2的值复制到array1
    array1 = array2
    

    数组变量的类型包括数组长度和每个元素的类型。只有这两部分都相同的数组,才是类型相同的数组,才能互相赋值。

    复制指针数组,只会复制指针的值,而不会复制指针所指向的值。

    var array [3]*string
    
    array2 := [3]*string{new(string), new(string), new(string)}
    
    *array2[0] = "Red"
    *array2[1] = "Blue"
    *array2[2] = "Green"
    
    array1 = array2
    

    多维数组

    数组本身只有一个维度,不过可以组合多个数组创建多维数组。

    var array [4][2]int
    
    array := [4][2]int{{10,11},{20,21},{30,31},{40,41}}
    
    array := [4][2]int{1: {20,21},3: {40,41}}
    
    array := [4][2]int{1: {0: 20},3: {1: 41}}
    
  • 相关阅读:
    根据访问属性进行差异化数据加载
    前人挖坑,后人填坑
    也让盲人拥抱互联网
    谈谈D2
    Android数据库大批量数据插入优化
    framework中编译anroid工程并在模拟器上运行
    简单JNI使用demo
    解决javah生成c头文件时找不到android类库的问题
    JNI的native代码中打印日志到eclipse的logcat中
    Android.mk简介<转>
  • 原文地址:https://www.cnblogs.com/Tu9oh0st/p/10896385.html
Copyright © 2011-2022 走看看