Go数组 | 青训营

102 阅读2分钟

数组

数组是同一种数据类型的集合,数组在声明时就已经确定了数组元素的个数(大小)和数组元素的数据类型,且数组的大小不可变,必须为常量

数组通过下标访问,下标从0开始

数组的声明:

var  数组名称  [数组大小]数据类型

例如:
var arr [5]int    表示数组arr存储的是五个int类型的变量

                      arr的数据类型是 [5]int

注意:[5]int 和[6]int 是不同的数据类型,数组大小不同数据类型也不同

数组的初始化:

方法一:根据数组大小设置数组元素

var arr1 [5]int     // [0 0 0 0 0]

声明时会将数组的每个元素默认为0,如果数组是[5]bool类型的话,数组的每个元素默认为false……默认值为数组元素类型的默认初始值


var arr2 = [5]int{1 ,2 ,3}     // [1 2 3 0 0]

指定值初始化,数据不足时剩下的元素都为0

var arr3 = [5]int{1 ,2 ,3 ,4 ,5}   // [1 2 3 4 5]


var arr4 = [5]int{1: 1,3: 3 }    //[0 1 0 3 0]

可以按照索引赋值


方法二:编译器根据数组元素判断数组大小

var arr5 = [...]int{1 ,2 ,3}    //[1 2 3]

此时len(arr5) = 3


var arr6 = [...]int{1: 1,3: 3 }     //[0 1 0 3]

此时len(arr6) = 4 


数组的遍历:

for遍历


for i := 0;i < len(arr6);i++ {
  fmt.Println(arr6[i])  
}

for range遍历


for i,v := range arr6 {
   fmt.Printf(“%d %d   ”,i,v)
}

 

多维数组

二维数组是数组元素为一维数组的数组

三维数组是数组元素为二维数组的数组

……

以二维数组为例:

声明格式:

var 数组名称 [二维数组包含的一维数组 的个数(二维数组的大小)][一维数组的大小]数据类型

例如:

var arr [3][2]int

初始化:

arr := [3][2]int{

   {0 ,1}

   {2 ,3}     {4 ,5}

}

遍历:

for i1,v1 := range arr {

    fmt.println(v1)

for i2,v2 := range v1 {

   fmt.printf(“%d”,v2)

}

fmt.Println()

}

 

数组是值类型,赋值和传值时会复制整个数组,因此对副本进行操作,并不会影响原数组的值。

在日常使用中,我们并不十分常用数组,我们会使用切片,切片基于数组,当时可以改变大小,进行扩容。