【Go】数组
知识点 | 关键概念 |
---|---|
数组定义 | var arr [5]int |
数组初始化 | arr := [5]int{1, 2, 3, 4, 5} |
省略长度 | arr := [...]int{1, 2, 3} |
获取长度 | len(arr) |
数组截取 | subArr := arr[1:3] (返回切片) |
二维数组 | var arr [3][4]int |
遍历数组 | for i := 0; i < len(arr); i++ 或 for index, value := range arr |
查找交集 | 嵌套 for 循环 |
修改元素 | arr[index] = newValue |
1. 数组的定义和初始化
代码示例
package main
import "fmt"
func main() {
// 定义一个长度为 5 的整型数组,默认初始化为 0
var arr1 [5]int
fmt.Println(arr1) // [0 0 0 0 0]
// 使用字面量初始化数组
var arr2 = [5]int{1, 2, 3, 4, 5}
fmt.Println(arr2) // [1 2 3 4 5]
// 只初始化特定索引位置的元素,未赋值的默认 0
arr3 := [5]int{1: 200}
fmt.Println(arr3) // [0 200 0 0 0]
// 使用 `...` 让编译器推断数组长度
arr4 := [...]int{1, 2, 3, 4, 5, 6, 7}
fmt.Println(arr4) // [1 2 3 4 5 6 7]
}
学习笔记
- 数组是定长的,长度在声明时就确定,不能动态改变。
- 索引默认从 0 开始,未初始化的元素会使用默认值(整数为 0)。
- 数组可以部分初始化,未指定值的索引会使用默认值。
[...]
让编译器自动推断数组长度,适用于长度未知但初始化值确定的情况。
2. 获取数组长度
代码示例
package main
import "fmt"
func main() {
arr := [...]int{1, 2, 3, 4, 5, 6, 7}
fmt.Println("数组长度:", len(arr)) // 7
}
学习笔记
- 使用
len()
获取数组长度,len(arr)
返回数组元素个数。 - 数组长度是固定的,不能动态调整。
3. 数组的截取(切片转换)
代码示例
package main
import "fmt"
func main() {
arr := [...]int{1, 2, 3, 4, 5, 6, 7}
subArr := arr[2:4] // 截取索引 [2, 4) 的部分
fmt.Println(subArr) // [3 4]
fmt.Printf("数组类型: %T\n", arr) // [7]int
fmt.Printf("切片类型: %T\n", subArr) // []int
}
学习笔记
- 数组的截取会变成切片,即
arr[start:end]
会返回一个[]int
类型的切片,而非数组。 - 切片是对原数组的引用,修改切片的元素会影响原数组。
4. 二维数组
代码示例
package main
import "fmt"
func main() {
// 定义一个 3x4 的二维数组
arr := [3][4]int{
{1, 2, 3},
{4, 5, 6},
{7}, // 逗号不能省略,否则语法错误
}
fmt.Println(arr)
}
学习笔记
- 二维数组可以部分初始化,未指定的元素会使用默认值(整数为 0)。
- 数组声明时必须指定长度,不能动态扩展。
- 可以通过
arr[row][col]
访问二维数组的元素。
5. 遍历数组
代码示例
package main
import "fmt"
func main() {
arr := [...]int{10, 20, 30, 40, 50}
// 使用 for 循环遍历
for i := 0; i < len(arr); i++ {
fmt.Println("索引:", i, "值:", arr[i])
}
// 使用 for-range 遍历
for index, value := range arr {
fmt.Println("索引:", index, "值:", value)
}
}
学习笔记
- 可以使用
for
循环遍历数组,通过len(arr)
获取数组长度。 for-range
更简洁,index, value := range arr
直接获取索引和值。
6. 查找两个数组的交集
代码示例
package main
import (
"fmt"
"strconv"
)
func main() {
arr1 := [...]int{1, 2, 5, 4, 6, 3, 1, 10}
arr2 := [...]int{6, 5, 8, 7, 4, 3, 6, 52}
result := ""
for _, v1 := range arr1 {
for _, v2 := range arr2 {
if v1 == v2 {
// 转换成字符串拼接
result += strconv.Itoa(v1) + " "
break
}
}
}
fmt.Println("交集元素:", result)
}
学习笔记
- 双层
for
循环可以比较两个数组的所有元素。 - 使用
break
可以减少不必要的比较,提高效率。 strconv.Itoa()
用于将整数转换为字符串,便于拼接结果。
7. 修改数组元素
代码示例
package main
import "fmt"
func main() {
arr := [...]int{10, 20, 30, 40, 50}
arr[2] = 100 // 修改索引 2 处的元素
fmt.Println(arr) // [10 20 100 40 50]
}
学习笔记
- 数组的元素可以通过索引访问和修改,
arr[index] = value
。 - 数组的大小不可变,但元素的值可以改变。
、