1.数组的概念

数组是相同类型的一组数据构成的长度固定的序列,其中数据类型包含了基本数据类型、复合数据类型和自定义类型。因为数组的内存是一段连续的存储区域,所以数组的检索速度是非常快的,但是数组也有一定的缺陷,就是定义后长度不能更改。

2.声明数组

2.1 先声明后使用

package main
import "fmt"
func main() {
// 声明一个长度为3的整型数组
var arr [3]int
arr[0] = 1
arr[1] = 3
arr[2] = 5
fmt.Printf("数组arr 类型: %T 值: %v",arr,arr)
}
// 输出: 数组arr 类型: [3]int 值: [1 3 5]

2.2 直接初始化使用

package main
import "fmt"
func main() {
// 直接声明使用
arr := [3]int{1,3,5}
fmt.Printf("数组arr 类型: %T 值: %v",arr,arr)
}
// 输出: 数组arr 类型: [3]int 值: [1 3 5]

2.3 声明数组(不指定长度)

package main
import "fmt"
func main() {
// 用...代表数组长度, 编译器会自动计算长度
arr := [...]int{1,3,5,7,9,11}
fmt.Printf("数组arr 类型: %T 值: %v",arr,arr)
}

3.二维数组

3.1 先声明后使用

package main
import "fmt"
func main() {
// 声明一个二维数组
var arr [3][4]int
// 赋值使用
arr[0] = [4]int{1,2,3,4}
arr[1] = [4]int{5,6,7,8}
arr[2] = [4]int{9,10,11,12}
fmt.Printf("数组arr 类型: %T 值: %v",arr,arr)
}
// 输出: 数组arr 类型: [3][4]int 值: [[1 2 3 4] [5 6 7 8] [9 10 11 12]]

3.2 直接初始化使用

package main
import "fmt"
func main() {
// 直接声明使用
arr := [3][4]int{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
}
fmt.Printf("数组arr 类型: %T 值: %v",arr,arr)
}
// 输出: 数组arr 类型: [3][4]int 值: [[1 2 3 4] [5 6 7 8] [9 10 11 12]]

3.3 遍历数组

package main
import "fmt"
func main() {
// 直接声明多维数组
arr := [3][4]int{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
}
// 遍历多维数组
for key,val := range arr {
for kk,vv := range val {
fmt.Printf("第%d维数组,第%d个元素v: %d \n",key,kk,vv)
}
}
}
/**输出:
第0组,第0个元素v: 1
第0组,第1个元素v: 2
第0组,第2个元素v: 3
第0组,第3个元素v: 4
第1组,第0个元素v: 5
第1组,第1个元素v: 6
第1组,第2个元素v: 7
第1组,第3个元素v: 8
第2组,第0个元素v: 9
第2组,第1个元素v: 10
第2组,第2个元素v: 11
第2组,第3个元素v: 12
*/

4.多维数组

4.1 三维数组声明

package main

import "fmt"

func main() {
// 先声明三维数组
var arr [2][3][4]int

// 后赋值
arr[0][0] = [4]int{1,2,3,4}
arr[0][1] = [4]int{10,20,30,40}
arr[0][2] = [4]int{100,200,300,400}

arr[1][0] = [4]int{11,22,33,44}
arr[1][1] = [4]int{111,222,333,333}
arr[1][2] = [4]int{1111,2222,3333,4444}
fmt.Printf("arr类型: %T 值: %v \n",arr,arr)

// 直接声明三维数组
arr2 := [2][3][4]int {
{
{1,2,3,4},
{10,20,30,40},
{100,200,300,400},
},
{
{11,22,33,44},
{111,222,333,333},
{1111,2222,3333,4444},
},
}
fmt.Printf("arr2类型: %T 值: %v",arr2,arr2)
}
/**输出
arr类型: [2][3][4]int 值: [[[1 2 3 4] [10 20 30 40] [100 200 300 400]] [[11 22 33 44] [111 222 333 333] [1111 2222 3333 4444]]]
arr2类型: [2][3][4]int 值: [[[1 2 3 4] [10 20 30 40] [100 200 300 400]] [[11 22 33 44] [111 222 333 333] [1111 2222 3333 4444]]]
*/

4.2 遍历三维数组

package main
import "fmt"
func main() {
// 先声明三维数组
var arr [2][3][4]int

// 后赋值
arr[0][0] = [4]int{1,2,3,4}
arr[0][1] = [4]int{10,20,30,40}
arr[0][2] = [4]int{100,200,300,400}

arr[1][0] = [4]int{11,22,33,44}
arr[1][1] = [4]int{111,222,333,333}
arr[1][2] = [4]int{1111,2222,3333,4444}
fmt.Printf("arr类型: %T 值: %v \n",arr,arr)

// 遍历输出
for _,val := range arr {
for _,vv := range val {
fmt.Printf("vv类型: %T 值: %v \n",vv,vv)
}
}
}
/*输出:
arr类型: [2][3][4]int 值: [[[1 2 3 4] [10 20 30 40] [100 200 300 400]] [[11 22 33 44] [111 222 333 333] [1111 2222 3333 4444]]]
vv类型: [4]int 值: [1 2 3 4]
vv类型: [4]int 值: [10 20 30 40]
vv类型: [4]int 值: [100 200 300 400]
vv类型: [4]int 值: [11 22 33 44]
vv类型: [4]int 值: [111 222 333 333]
vv类型: [4]int 值: [1111 2222 3333 4444]
*/