第7章:数组
数组是一种基本的数据结构,用于存储相同类型的元素集合。在Go语言中,数组的大小是固定的,一旦定义,其长度不可改变。本章将详细介绍Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。
一、数组的定义与初始化
(一)定义数组
在Go语言中,数组的定义格式如下:
var 数组名 [数组大小]数据类型
- 数组大小:数组中元素的数量,必须是一个常量。
- 数据类型:数组中所有元素的数据类型。
例如,定义一个包含5个整数的数组:
var scores [5]int
(二)初始化数组
数组可以在定义时进行初始化,也可以在定义后单独赋值。
1. 定义时初始化
var scores [5]int = [5]int{95, 91, 39, 60, 21}
或者更简洁地:
var scores = [5]int{95, 91, 39, 60, 21}
2. 定义后初始化
var scores [5]int
scores[0] = 95
scores[1] = 91
scores[2] = 39
scores[3] = 60
scores[4] = 21
(三)省略数组大小
如果在定义数组时已经提供了初始值,可以省略数组的大小,让编译器自动推断:
var scores = [...]int{95, 91, 39, 60, 21}
二、数组的访问与修改
(一)访问数组元素
通过索引来访问数组中的元素,索引从0开始。例如:
package main
import "fmt"
func main() {
var scores = [5]int{95, 91, 39, 60, 21}
fmt.Println("第一个元素:", scores[0])
fmt.Println("第二个元素:", scores[1])
}
(二)修改数组元素
同样通过索引来修改数组中的元素。例如:
package main
import "fmt"
func main() {
var scores = [5]int{95, 91, 39, 60, 21}
scores[2] = 88 // 修改第三个元素
fmt.Println("修改后的数组:", scores)
}
三、数组的遍历
(一)使用for
循环遍历
可以使用普通的for
循环来遍历数组。例如:
package main
import "fmt"
func main() {
var scores = [5]int{95, 91, 39, 60, 21}
for i := 0; i < len(scores); i++ {
fmt.Println("索引", i, "的值为:", scores[i])
}
}
(二)使用for-range
循环遍历
for-range
循环是Go语言中特有的一种迭代结构,可以更简洁地遍历数组。例如:
package main
import "fmt"
func main() {
var scores = [5]int{95, 91, 39, 60, 21}
for index, value := range scores {
fmt.Println("索引", index, "的值为:", value)
}
}
四、数组的长度
可以使用内置函数len
来获取数组的长度。例如:
package main
import "fmt"
func main() {
var scores = [5]int{95, 91, 39, 60, 21}
fmt.Println("数组的长度为:", len(scores))
}
五、多维数组
(一)定义多维数组
多维数组是数组的数组。例如,定义一个2维数组:
var matrix [3][3]int
(二)初始化多维数组
var matrix = [3][3]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
(三)访问与修改多维数组
package main
import "fmt"
func main() {
var matrix = [3][3]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
fmt.Println("第一个元素:", matrix[0][0])
matrix[1][1] = 100 // 修改第二行第二列的值
fmt.Println("修改后的数组:", matrix)
}
(四)遍历多维数组
package main
import "fmt"
func main() {
var matrix = [3][3]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
for i := 0; i < len(matrix); i++ {
for j := 0; j < len(matrix[i]); j++ {
fmt.Println("matrix[", i, "][", j, "] = ", matrix[i][j])
}
}
}
六、数组的内存分析
数组是值类型,存储在栈上。数组的每个元素占用的字节数取决于其数据类型。例如,int
类型在64位系统上通常占用8字节,因此一个[5]int
数组占用40字节。
七、数组的优缺点
(一)优点
- 访问速度快:数组的索引访问非常快,时间复杂度为O(1)。
- 内存连续:数组的元素在内存中是连续存储的,这有助于提高缓存命中率。
(二)缺点
- 大小固定:数组的大小在定义后不能改变。
- 灵活性差:数组的大小必须在编译时确定,不能动态调整。
八、总结
本章详细介绍了Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。数组是一种基本的数据结构,适用于存储固定大小的相同类型元素集合。通过合理使用数组,可以实现高效的元素访问和操作。
在实际开发中,数组的固定大小可能会限制其使用场景。在需要动态调整大小的情况下,可以使用切片(将在第8章详细介绍)。数组和切片在Go语言中都是非常重要的数据结构,掌握它们的使用方法对于编写高效、可读性强的代码至关重要。
在接下来的章节中,我们将继续深入学习Go语言的其他特性,如切片、映射等。希望读者能够通过这些内容更好地掌握Go语言,提升编程技能。