1.数组的概念

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

2.声明数组

2.1 先声明后使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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 直接初始化使用

1
2
3
4
5
6
7
8
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 声明数组(不指定长度)

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

3.二维数组

3.1 先声明后使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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 直接初始化使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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 遍历数组

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 三维数组声明

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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 遍历三维数组

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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] 
*/