Go语言中的数组

数组的定义与初始化

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
func arrs1() {
// 数组的定义与初始化
var arr [5]int

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

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

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

var arr4 = [...]int{0: 1, 4: 3}

arr5 := make([]int, 5)

fmt.Println(arr)
fmt.Println(arr1)
fmt.Println(arr2)
fmt.Println(arr3)
fmt.Println(arr4)
fmt.Println(arr5)
}

func main() {
arrs1()
}
----------------------
[0 0 0 0 0]
[1 2 3 4 5]
[1 2 3 4 5]
[1 2 3 4 5]
[1 0 0 0 3]
[0 0 0 0 0]

数组的遍历方式

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
func arrs2() {
fmt.Println("遍历数组的方式:")
arr := [...]int{1, 2, 3, 4, 5}
// 遍历数组的方式1:
for i := 0; i < len(arr); i++ {
fmt.Println(arr[i])
}
// 2:
for i, v := range arr {
fmt.Printf("%d:%d\n", i, v)
}
}

func main() {
arrs2()
}
--------------------------
1
2
3
4
5
0:1
1:2
2:3
3:4
4:5

数组的小特性

数组是值类型,因此改变数组的副本的值并不会使其本身的值发生改变

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func arrs3() {

arr := [3]int{1, 2, 3}

arr1 := arr
// 数组是值类型 改变副本的值并不会改变本身的值
arr1[2] = 5
fmt.Printf("arr:%v\n", arr)
fmt.Printf("arr1:%v\n", arr1)

}

func main() {
arrs2()
}
--------------------
arr:[1 2 3]
arr1:[1 2 5]

使用数组实现斐波那契数列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func fab() {
// 使用数组的方式打印斐波那契数列
arr := make([]int, 10)

arr[0] = 1
arr[1] = 1
for i := 2; i < 10; i++ {
arr[i] = arr[i-1] + arr[i-2]
}
fmt.Printf("斐波那契数列:%v\n", arr)
}

func main() {
fab()
}
--------------------
斐波那契数列:[1 1 2 3 5 8 13 21 34 55]

遍历二维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func arrs4() {
// 多维数组
arr := [2][3]int{{1, 2, 3}, {4, 5, 6}}

for i, v := range arr {
for _, v1 := range v {
fmt.Printf("第[%d]行:%d ", i, v1)
}
fmt.Println()
}
}

func main() {
fab()
}
--------------------
第[0]行:1 第[0]行:2 第[0]行:3
第[1]行:4 第[1]行:5 第[1]行:6