本博客涉及内容:数组
数组
数组定义
在 go 语言中,数组是一种固定大小的数据结构,用于存储相同类型的元素。数组的定义方式如下:
var arrayName [size]Type
可以通过len()函数测试数组的长度:
func main() {
var a [10]int
fmt.Println(len(a))
}
当定义完数组a后,就在内存中开辟了10个连续的存储空间,每个数据都存储在相应的空间中,数组包含的每个数据被称为数组元素(element),一个数组包含的元素个数成为数组的长度。
【注】
数组的长度只能是常量。
1. 数组赋值
数组定义完成后,可以对数组进行赋值操作。数组是通过下标来进行操作的,下标范围是从0开始到数组长度减1的位置。
完成数组赋值的第一种方式
// 完成数组赋值的第一种方式
a[0] = 100
a[1] = 200
a[2] = 300
a[3] = 400
a[4] = 500
a[5] = 600
a[6] = 700
a[7] = 800
a[8] = 900
a[9] = 1000
完成数组赋值的第二种方式
for i := 0; i < 10; i++ {
a[i] = i
}
【注】如果数组不进行赋值,默认全是0
2. 数组初始化
在定义数组时,也可以完成赋值,这种情况叫做数组的初始化。
// 全部初始化
var b [5]int = [5]int{1, 2, 3, 4, 5}
fmt.Println(b)
c := [5]int{1, 2, 3, 4, 5}
fmt.Println(c)
// 部分初始化,没有初始化的元素,自动赋值为0
d := [5]int{1, 2, 3}
fmt.Println(d)
// 指定某个元素初始化
e := [5]int{2: 10, 4: 20}
fmt.Println(e)
3. 数组求值
练习一:从一个整数数组中取出最大的整数,最小整数,总和、平均值。
func main() {
/*
练习1:从一个整数数组中取出最大的整数、最小整数、总和、平均值
1、全部初始化
2、声明两个变量来存储最大值和最小值
3、循环数组,将数组中的每个元素值与最大值和最小值进行比较
*/
var a [6]int = [6]int{1, 2, 3, 4, 5, 6}
var max int = a[0]
var min int = a[0]
var sum int //存储和
for i := 0; i < len(a); i++ {
if max < a[i] {
max = a[i]
}
if min > a[i] {
min = a[i]
}
sum += a[i]
}
fmt.Printf("max: %d, min: %d, sum: %d\n", max, min, sum)
}
首先我们先初始化一个数组,然后定义两个变量max
和min
分别存储最大值和最小值。将a[0]赋值给它们是因为变量未赋值的时候默认零值。使用for进行循环,在循环的过程中进行判断,如果a[i]>max
,则将a[i]
的值赋值给max
(min同理)。最后使用fmt.Printf
进行格式化输出。
练习二:将数组中的元素进行分割。
names := [...]string{"罗辑", "史强", "叶文洁", "章北海"}
var str string
for i := 0; i < len(names)-1; i++ {
str += names[i] + "|"
}
fmt.Println(str + names[len(names)-1])
使用for循环将其中的各个数组单独取出来。
4. 数组逆置
将一个字符串的元素顺序进行反转。
func main() {
a := []int{1, 2, 3, 4, 5}
var temp int // 定义中间变量,负责交换
for i := 0; i < len(a)/2+1; i++ {
temp = a[i]
a[i] = a[len(a)-i-1]
a[len(a)-i-1] = temp
}
fmt.Println(a)
}
定义一个临时变量用于交换,注意在for循环中是循环到中间加一的部分,而不是完成整个循环。
5.冒泡排序
具体的请参考B站视频
func main() {
var num [10]int = [10]int{12, 2, 3, 45, 51, 6, 37, 28, 19, 10}
var temp int = num[0]
for i := 0; i < len(num); i++ {
for j := 0; j < len(num)-i-1; j++ {
if num[j] < num[j+1] {
temp = num[j]
num[j] = num[j+1]
num[j+1] = temp
}
}
}
fmt.Println(num)
}
6.数组作为函数参数
数组也可以像变量一样,作为参数传递给函数。用法如下:
package main
import "fmt"
/*
数组作为参数进行传递
*/
func modify(a [5]int) {
a[0] = 100 // 修改a[0]的值
fmt.Println("modify a:", a[0])
}
func main() {
a := [5]int{1, 2, 3, 4, 5}
modify(a)
fmt.Println(a)
}
但是输出结果并没有影响到原来的值,涉及到值传递和引用传递,指针会对这个问题进行说明。也可参考C语言指针。