跳到主要内容

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 列
}