Go Array

作者: JunChow520 | 来源:发表于2020-12-29 22:48 被阅读0次
  • 数组是由固定长度特定类型元素组成的序列
  • 数组可由零个或多个元素组成

Go语言中数组是固定长度且特定类型的,与之对应的是切片(Slice),切片是可以增长或收缩的动态序列。

数组声明

var 数组变量名 [元素个数]Type
  • 数组变量名:数组声明及使用时的变量名
  • 元素个数:数组的元素数量即数组长度,可以是表达式,但最终通过编译器计算的结果必须是整数,元素数量不能含有到运算时才能确定大小的数值。
  • 数据类型:可以说任意基本类型,包括数组本身,当类型为数组本身时可实现多维数组。

数组元素可通过索引下标来访问,索引下标从0开始递增到长度减一的位置,内置函数len()可获取数组元素个数。

package main

import "fmt"

//定义数组
var arr [10]int

func main() {
    //获取数组第一个元素
    fmt.Printf("array first item is %d\n", arr[0])
    //获取数组最后一个元素
    fmt.Printf("array last item is %d\n", arr[len(arr)-1])
    //数组遍历
    for k,v := range arr {
        fmt.Printf("k = %d, v = %d\n", k, v)
    }
    for _,v := range arr{
        fmt.Printf("item = %d\n", v)
    }
}

数组初始化

默认数组元素会被初始化为类型对应的默认值,可使用数组字面量来初始化数组。

package main

import "fmt"

func main() {
    arr := [3]int{1, 2}
    for _,v := range arr{
        fmt.Printf("item is %d\n", v)
    }
}

数组定义中若数组长度使用...则表示数组长度会根据初始值的个数进行计算

package main

import "fmt"

func main() {
    arr := [...]int{1, 2, 3}
    fmt.Printf("array type is %T\n", arr)//array type is [3]int
    fmt.Printf("array length is %d\n", len(arr))//array length is 3
}

数组长度是数组类型的组成部分,数组长度必须是常量表达式,因为数组长度必须在编译阶段确定。

package main

import "fmt"

func main() {
    arr := [...]int{1, 2}
    arr = [3]int{1, 2, 3}//cannot use [3]int literal (type [3]int) as type [2]int in assignment
    fmt.Printf("array length is %d", arr)
}

编译错误:无法将 [3]int 赋值给 [2]int

数组比较

只有当两个数组的长度和元素类型相同时才能使用==!=运算符来判断是否相等

package main

import "fmt"

func main() {
    arr1 := [...]int{1, 2}
    arr2 := [...]int{1, 2}
    fmt.Print(arr1 == arr2)//true

    arr3 := [...]int{1, 2, 3}
    fmt.Print(arr1 == arr3)//invalid operation: arr1 == arr3 (mismatched types [2]int and [3]int)
}

编译错误:非法操作

数组遍历

  • 使用for循环遍历数组,遍历出的键为数组的索引,值为数组元素值。
  • 数组的遍历方式和切片类似
package main

import "fmt"

func main() {
    arr := [...]string{"username", "password"}
    for k,v := range arr{
        fmt.Printf("k = %d, v = %s\n", k, v)
    }
}

多维数组

  • Go语言中数组属于值类型,因此可使用多维数组。
  • 多维数组所有维度都会在创建时自动初始化其默认值
  • 多维数组适用于管理具有父子关系或类似坐标关联关系的数据

创建4x2的二位数组

var arr [4][2]int

使用数组字面量初始化二维数组

arr = [4][2]int{{1, 2}, {10, 20}, {100, 200}, {1000, 2000}}

声明并初始化数组中索引为1和3的元素

package main

import "fmt"

var arr [4][2]int

func main() {
    arr = [4][2]int{1:{1, 2}, 3:{100, 200}}
    for k,v := range arr{
        fmt.Printf("k=%d, v=%v\n", k, v)
    }
}
k=0, v=[0 0]
k=1, v=[1 2]
k=2, v=[0 0]
k=3, v=[100 200]

访问多维数组中单个元素的值

arr = [4][2]int{1:{1, 2}, 3:{100, 200}}
fmt.Printf("%d\n", arr[1][0])//1

相关文章

  • Go array

    Outputs:

  • Go Array

    数组是由固定长度特定类型元素组成的序列 数组可由零个或多个元素组成 Go语言中数组是固定长度且特定类型的,与之对应...

  • Go array range

  • Go array & slice

    A slice does not store any data, it just describes a sect...

  • Go-Array

    golang初始化数组 golang中数组为值类型 方式1:指定数组长度 方式2:自行推断数组长度 方式3:指定索...

  • Go - array、slice

    array 特征 内存连续,可以根据索引获取元素. 初始化之后大小就无法改变. 存储元素类型相同、大小相同的两个数...

  • GO学习 Array

    基础篇 package main import "fmt" func main() { /* 数据类型: ...

  • 八、Go range的用法

    八、Go语言range Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slic...

  • go语言array, slice, map(四)

    array go语言数组,定义方法如下: var arr [n]type 声明方法 go语言也支持多维数组 sli...

  • 深入理解 Go Slice

    原文地址:深入理解 Go Slice 是什么 在 Go 中,Slice(切片)是抽象在 Array(数组)之上的特...

网友评论

      本文标题:Go Array

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