数组
数组可以存放多个同一类型数据。数组也是一种数据类型,在Go中,数组是值类型。
//定义一个数组
var hei [3]float64
//给数组中每个元素赋值,元素的下标是从0开始的
hei[0] = 0.2
hei[1] = 1.2
hei[2] = 2.2
//遍历数组
sum := 0.0
for i:=0; i<len(hei); i++{
sum += hei[i]
}
fmt.Println(sum)
数组的定义
var 数组名 [数组大小]数据类型 var hei [3]float64
赋初值 hei[0] = 0.2 ....
数组的使用
//从终端输入五个成绩,保存到float60数组,并输出
var score [5]float64
for i := 0;i<len(score);i++{
fmt.Printf("请输入第%d个元素的值", i+1)
fmt.Scanln(&score[i])
}
fmt.Println(score)
//输出
for i:=0; i<len(score); i++{
fmt.Println(score[i])
}
四种初始化数组的方式
var num1 [2]int = [2]int{2,2}
var num2 = [2]float64{2.2,2.3}
//[...]固定的写法
var num3 = [...]int{6,5,4}
var num4 = [...]string{1:"you",2:"are"}
num5 := [...]string{0:"my",1:"friend"}
for-range结构遍历
这是Go语言一种独有的结构,可以用来遍历访问数组的元素。
基本语法
for index, value := range array01 {
..........
}
1) 第一个返回值 index 是数组的下标
2) 第二个 value 是在该下标位置的值
3) 他们都是仅在for循环内部可见的局部变量
4) 遍历数组元素的时候,如果不想使用下标 index,可以直接把下标 index 标为下划线_
5) index 和value 的名称不是固定的,即可以自行指定,一般命名为index和 value
boys := [...]string{"蜘蛛侠","钢铁侠","蝙蝠侠"}
for index,value := range boys{
fmt.Printf("index=%v value=%v \n",index,value)
}
for _,value := range boys{
fmt.Printf(" value=%v \n",value)
}
数组使用注意事项和细节
1) 数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。
2) var arr []int 这时 arr 就是一个slice切片.
3) 数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。
4) 数组创建后,如果没有赋值,有默认值
数值类型数组: 默认值为o
字符串数组: 默认值为""
bool数组: 默认值为false
5) 使用数组的步骤1: 声明数组并开辟空间 2 : 给数组各个元素赋值 3 : 使用数组
6) 数组的下标是从0开始的。
7) 数组下标必须在指定范围内使用,否则报panic: 数组越界,比如var arr [5]int 则有效下标为0-4
8) Go的数组属值类型,在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响
9) 如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式)
10) 长度是数组类型的一部分,在传递函数参数时需要考虑数组的长度。
//1)创建一个byte类型的26个元素的数组,分别放置"A'-'Z5。
//使用for循环访问所有元素并打印出来。提示:字符数据运算‘A'+1 ->‘B’
var CharC [26]byte
for i:=0 ;i<len(CharC);i++{
CharC[i] = 'A' + byte(i)
}
//输出
for i:=0;i<len(CharC);i++{
fmt.Printf("%c ",CharC[i])
}
//请求出一个数组的最大值,并得到对应的下标
var arr = [...]int{88,69,96,0,-1}
max := arr[0]
maxIndex := 0
for i :=0 ;i<len(arr);i++ {
if arr[i] > max {
max = arr[i]
maxIndex =i
}
}
fmt.Printf("\n 最大值为%d,最大值下标%d",max,maxIndex)
//请求出一个数组的和和平均值。for-range
var arr2 = [...]int{8,6,9,15,-1}
sum := 0
for _,value := range arr2{
sum += value
}
fmt.Printf(" \n 和为:%d,平均值为:%v",sum,float64(sum)/float64(len(arr2)))
数组复杂使用-数组反转
//随机生成五个数,并将其反转打印
var arr3 [5]int
len := len(arr3)
//为了每次生成的随机数不一样,我们需要给一个seed值
rand.Seed(time.Now().UnixNano())
for i:=0;i<len;i++{
arr3[i] = rand.Intn(100) //0<=n<100
}
fmt.Println("before",arr3)
//反转打印
temp :=0
for i:=0;i<len/2;i++{
temp =arr3[len-1-i]
arr3[len-1-i]=arr3[i]
arr3[i] = temp
}
fmt.Println("after",arr3)