Go数组
摘要:本文是关于 Go 语言数组的学习笔记,内容包括数组的定义、初始化、遍历等基础用法,并通过实例说明如何使用数组解决实际问题,例如计算学生成绩的总分和平均分。适合初学者快速掌握数组的基本操作(
以上内容由ChatGpt生成)
数组的定义
package main
import "fmt"
func main() {
// var 数组名称[最大容量]数据类型
var arr [3]int
var arr1 [4]string
fmt.Printf("%T , %T", arr, arr1)
}
在定义数组时,需要指定数组的最大容量和数据类型,最大容量是指数组的最大元素数量,数据类型是指数组中存放的元素类型
1.1 超过最大长度时
package main
func main() {
// var 数组名称[最大容量]数据类型
var arr [3]int
arr[0] = 100
arr[3] = 1000 // 此时会报错,因为最大索引为: 数组最大数量 - 1
}
此时运行会报:invalid argument: index 3 out of bounds [0:3],也就是超出数组的最大容量,这是不被允许的。
1.2 数据类型不符时
package main
func main() {
// var 数组名称[最大容量]数据类型
var arr [3]int
arr[0] = 100
arr[1] = 100.5 // 此时会报错,因为arr只能存储int类型的数据, 100.5属于float类型的数据
}
此时运行会报:cannot use 100.5 (untyped float constant) as int value in assignment (truncated),不支持非int类型的数据
数组的初始化
2.1 先定义数组在初始化
在Go中,我们可以先定义数组,在通过索引的方式对数组进行初始化,这里要注意的是:数组在定义时会通过默认值进行初始化。
package main
import "fmt"
func main() {
var arr [3]int
fmt.Print(arr)
}
这里我们并没有进行初始化的操作,此时打印的结果是:[0 0 0],使用了int类型的默认值。
package main
import "fmt"
func main() {
var arr [3]int
arr[0] = 15
arr[1] = 25
arr[2] = 35
fmt.Print(arr)
}
此时运行的结果是[15 25 35],其实这里也可以成为修改数组中的值
2.2 在定义时进行初始化
package main
import "fmt"
func main() {
/*
数组名称 := [数组最大容量]数据类型{元素1, 元素2, ...}
*/
var arr = [3]int{10, 15, 20}
arrStr := [4]string{"Java", "Python", "Go", "Javascript"}
fmt.Println("arr:", arr)
fmt.Println("arrStr:", arrStr)
}
这段代码的运行结果是:
arr: [10 15 20]
arrStr: [Java Python Go Javascript]
2.3 让Go根据初始化的元素自动设置最大容量
package main
import "fmt"
func main() {
/*
数组名称 := [...]数据类型{元素1, 元素2, ...}
*/
arr := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
fmt.Printf("arr: %v, T: %T", arr, arr)
}
通过[...]的方式可以让Go自动设置数组的最大容量,这段代码的运行结果是arr: [1 2 3 4 5 6 7 8 9 10], T: [10]int
2.4 通过设置特定索引位置的值实现初始化
package main
import "fmt"
func main() {
/*
数组名称 := [...]数据类型{索引0:值1, 索引n:值n, ...}
*/
arr := [...]int{0: 100, 2: 100, 5: 1000}
fmt.Printf("arr: %v, T: %T", arr, arr)
}
可以通过索引:值的方式来创建数组,数组的最大长度是依据{}中出现的最大索引决定的,且除了指定索引的数据,其他数据为对应数据类型的默认值,这段代码的运行
结果是arr: [100 0 100 0 0 1000], T: [6]int
数组的遍历
3.1 通过for .. i进行遍历
package main
import "fmt"
func main() {
// len(数组) 获取数组的长度
arr := [...]int{0: 100, 2: 100, 5: 1000}
for i := 0; i < len(arr); i++ {
fmt.Println(arr[i])
}
}
3.2 通过for .. range进行遍历
package main
import "fmt"
func main() {
arr := [...]int{0: 100, 2: 100, 5: 1000}
for k, v := range arr {
// k : 元素下标 v: 元素值
fmt.Printf("k: %v, v:%v\n", k, v)
}
}
数组的练习
4.1 计算数组元素的平均值
假设一个学生的考试成绩如下:
语文: 70
数学: 85
英语: 36
政治: 73.5
历史: 70.5 请计算出学生的总成绩和平均成绩
设计思路:
- 创建一个数据类型为float的数组用来保存各科成绩
- 通过sum来计算总分
- 在用sum除以数组长度来获取学生的平均分
代码实现:
package main
import "fmt"
func main() {
arr := [...]float64{70, 85, 36, 73.5, 70.5}
sum := 0.0
for i := 0; i < len(arr); i++ {
sum += arr[i]
}
fmt.Printf("学生总分是:%.2f, 平均分是: %.2f", sum, sum/float64(len(arr)))
}