面试题答案
一键面试- 直接初始化并指定所有元素值
- 语法:
var arr [n]type = [n]type{value1, value2, ..., valueN}
或者arr := [n]type{value1, value2, ..., valueN}
。例如:var numbers [3]int = [3]int{1, 2, 3}
或者numbers := [3]int{1, 2, 3}
。 - 适用场景:适用于数组大小固定且已知每个元素具体值的场景,比如定义一个星期几的数组
days := [7]string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
。在这种场景下,开发人员确切知道数组每个位置的内容,这种初始化方式最为直观和简单。
- 语法:
- 根据初始化值自动推断数组大小
- 语法:
var arr = [...]type{value1, value2, ..., valueN}
或者arr := [...]type{value1, value2, ..., valueN}
。例如:var numbers = [...]int{1, 2, 3}
或者numbers := [...]int{1, 2, 3}
。这里编译器会根据初始化值的个数自动推断数组的大小。 - 适用场景:当你不确定数组大小,但确切知道元素值时适用。比如在从配置文件中读取一系列固定值,而值的数量可能会在未来有微小变化的场景。如果使用固定大小声明,每次配置文件值数量变化时都需要修改数组大小声明,而这种方式则无需修改。
- 语法:
- 使用索引初始化特定位置元素
- 语法:
var arr [n]type = [n]type{index1: value1, index2: value2, ...}
或者arr := [n]type{index1: value1, index2: value2, ...}
。例如:var scores [5]int = [5]int{0: 90, 2: 85}
或者scores := [5]int{0: 90, 2: 85}
。这样数组中索引为0的元素值是90,索引为2的元素值是85,其他未指定的元素为其类型的零值(这里int类型零值为0)。 - 适用场景:适用于数组中大部分元素为零值(或默认值),仅少数特定位置元素有特殊值的场景。比如在统计学生成绩时,成绩表中大部分学生成绩为0(未考试),只有少数学生有实际成绩,就可以用这种方式初始化数组来记录成绩。
- 语法:
- 初始化零值数组
- 语法:
var arr [n]type
。例如:var numbers [5]int
。此时数组中的所有元素会被初始化为其类型的零值,对于int类型是0,string类型是"" 等。 - 适用场景:在需要一个固定大小的数组,且后续会逐步填充其元素值的场景。比如在一个循环中从数据库读取数据填充到数组中,先初始化一个合适大小的零值数组,再逐步更新每个元素。
- 语法:
- 使用循环初始化数组
- 语法:
var arr [n]type
for i := 0; i < n; i++ {
arr[i] = someValueGenerator(i)
}
例如,生成一个包含1到100的整数数组:
var numbers [100]int
for i := 0; i < 100; i++ {
numbers[i] = i + 1
}
- 适用场景:在处理固定大小且初始值有规律的数据集合时非常合适。比如生成一个等差数列数组,或者生成一个按照某种规则计算得出值的数组。