array
array 是什么? 长度与值语义有何特点?
- array: 固定长度, 元素类型相同的值序列;
- 长度: array 类型的一部分,
[3]int和[4]int是不同类型; - 值语义: 赋值和传参会复制整个数组;
func main() {
var nums [3]int // 固定长度数组; 元素零值为 0
nums[0] = 10 // 数组索引从 0 开始
println(nums[0], len(nums))
}
array 有哪些初始化写法?
- 初始化:
[N]T{...}显式指定长度,[...]T{...}由最高元素索引加一确定长度;省略的元素使用零值;
func main() {
a := [3]int{1, 2, 3} // 显式长度数组字面量
b := [...]int{1, 2, 3} // 由元素数量推导数组长度
c := [5]int{1: 10, 3: 30} // 指定索引初始化; 未指定元素为零值
println(a[0], b[1], c[3])
}
数组相等的条件是什么? 哪些数组不可比较?
- array 可比较条件: 元素类型可比较;
- 相等条件: 两个数组必须先满足类型兼容的比较规则,再逐元素判断相等;长度相同不意味着两个自定义数组类型就能直接比较;
- 类型差异:
[2]int和[3]int不是同一类型;
func main() {
a := [2]int{1, 2}
b := [2]int{1, 2}
println(a == b) // true
}
如何声明和访问多维数组?
- 多维数组: 外层数组的每个元素还是数组;
[2][3]int表示两个[3]int,逐层下标访问对应元素;
func main() {
matrix := [2][3]int{{1, 2, 3}, {4, 5, 6}} // 2 行 3 列数组
println(matrix[1][2]) // 访问第 2 行第 3 列
}