Go语言基础:数组定义及循环遍历
前言
大家好,我是沐风晓月,本文go语言入门-掌握go语言函数收录于《go语言学习专栏》专栏,此专栏带你从零开始学习go语言,持续更新中,欢迎点赞收藏。
🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云博客专家
😉😉 💕 座右铭:先努力成长自己,再帮助更多的人,一起加油进步
🍺🍺🍺💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信
文章目录
- 前言
- 一. 数组的介绍
- 1.1 什么是数组?
- 1.2 数据的声明及语法
- 二. 数组的初始化
- 2.1 指定长度和初始值
- 2.2 不指定数组长度来初始化数组
- 2.3 指定长度,通过索引值来初始化
- 2.4 不指定长度,通过索引值进行初始化
- 2.5 数组的访问
- 三. 数组的比较
- 3.1 数据类型相同,但长度不同
- 3.2 数据类型相同且长度相同
- 四. 数组的遍历
- 五 . 二维数组
- 5.1 二维数组的介绍
- 5.2 二维数组的遍历
- 总结
一. 数组的介绍
1.1 什么是数组?
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
- 数组可以由0个元素或者多个元素组成,但不能增长和收缩。
- go语言中,数组是一种值类型,元素可以被修改。
- 数组的元素索引从0开始
1.2 数据的声明及语法
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:
var varName [SIZE]var Type
语法说明如下所示:
- varName(数组变量名):数组声明及使用时的变量名。
- SIZE(元素数量):数组的元素数量,可以是一个表达式,但最终通过编译期计算的结果必须是整型数值,元素数量 不能含有到运行时才能确认大小的数值。
- Type(数组类型):可以是任意基本类型,包括数组本身,类型为数组本身时,可以实现多维数组。
举例: 定义一个数组mufeng,长度为10,类型为float32
var mufeng [10] float32
二. 数组的初始化
2.1 指定长度和初始值
指定长度和初始化值,初始化数组中 {} 中的元素个数不能大于 [] 中的数字:
package main
import "fmt"
func main() {
var mufeng = [5]float32{1.0, 2.0, 3.0, 4.0, 5.0}
fmt.Println(mufeng)
}
这里要注意,初始值的元素之间需要用,
隔开,当[5]
中指定为5个,后面的大括号就不应该能大于5,但可以小于5. 小于5的时候,会有默认值补全。 比如数字类型,默认值就是0.
package main
import "fmt"
func main() {
var mufeng = [5]float32{1.0, 2.0, 3.0, 4.0}
fmt.Println(mufeng[4])
// 结果就为0
}
可以看到当我们获取mufeng下标为4的值的时候,结果就是0.
2.2 不指定数组长度来初始化数组
当我们不指定长度的时候,也就是[]
中不写入内容,GO语言默认会根据元素的个数来设置数组的大小。
package main
import "fmt"
func main() {
var mufeng = []int{1, 2, 3, 4}
fmt.Println(mufeng)
}
2.3 指定长度,通过索引值来初始化
此时我们使用索引值来初始化,1:1
就表示,下标为1的元素,初始值为1. 下标默认初始值为0,我们看下面的代码案例:
package main
import "fmt"
func main() {
mufeng := [4]int{1:1, 2: 2}
fmt.Println(mufeng)
//执行结果为[0 1 2 0 ]
}
由执行结果可以看出,下标0 未定义,所以输出结果为0.
2.4 不指定长度,通过索引值进行初始化
如果我们不指定长度,系统会默认以你索引值的最大值来决定长度。 比如:
package main
import "fmt"
func main() {
mufeng := []int{1: 1, 4: 2}
fmt.Println(mufeng)
//执行结果为[0 1 0 0 2]
}
这个脚本中,虽然没有指定长度,但是索引值最大是4,而且索引值为4的时候,初始化为2.,未初始化的都是0.
所以执行结果为 [0 1 0 0 2]。
2.5 数组的访问
数组的每个元素都可以通过索引下标来访问,索引下标的范围是从 0 开始到数组长度减 1 的位置,内置函数 len()
可以返回数组中元素的个数。
package main
import "fmt"
func main() {
mufeng := []int{1: 1, 4: 2}
fmt.Println(mufeng)
//执行结果为[0 1 0 0 2]
var mufeng1 = [4]int8{2, 4, 6, 8}
fmt.Println("对mfueng1取索引为3的值", mufeng1[3])
//对mfueng1取索引为3的值 8
fmt.Println("统计元素个数", len(mufeng1))
//统计元素个数 4
}
想要获取第几位的值,就根据下表去访问,比如第一位的值 mufeng1[0]
,打印最后一个元素,但你不知道最后一个是第几位,就可以用len()
package main
import "fmt"
func main() {
mufeng := []int{1: 1, 4: 2}
fmt.Println(mufeng[len(mufeng)-1])
//执行结果为2
}
这里的计算公式是: 先统计一共有多少个元素:len(mufeng)
, 而下标值就等于总元素的个数减1. len(mufeng)-1
.
有了下标值之后,就可以根据下标获取元素值, 也就是mufeng(len[(mufeng) -1])
.
三. 数组的比较
3.1 数据类型相同,但长度不同
我们学字符串类型的时候,经常会把 a== b
把b复制给a, 但在数组这边,需要注意几个地方:
虽然数据类型相同,但长度不相等的两个数组,肯定是不相等的。 比如 [3]int
和[4] int
,这其实是两种不同的数组类型。
mufeng := [2] int{1,2}
mufeng=[3]int{1,2,3} 这里的赋值方法是错误的,因为他们两个的长度不相等
3.2 数据类型相同且长度相同
如果两个数组类型相同(包括数组的长度,数组中元素的类型)的情况下,我们可以直接通过较运算符(==和!=)来判断两个数组是否相等,只有当两个数组的所有元素都是相等的时候数组才是相等的,不能比较两个类型不同的数组,否则程序将无法完成编译。
可以看到,当mufeng1 和mufeng2 以及mufeng4对标的时候,因为[]
里的值不同,所以无法编译通过。
四. 数组的遍历
一维数组的声明及遍历代码:一个标准的for循环遍历及一个range调用遍历
for...range
迭代的性能会更好一些,他的语法:
for index,value := range myArray{
//循环体
}
格式说明:
- index:保存每个元素索引的变量
- value:保存每个元素值的变量
- myArray:正在处理的数组
package main
import "fmt"
func main() {
var mufeng3 = []int{1, 2, 3, 4, 5}
//for循环变量的方法
//这里是把两种方法写一起了所以把上面的注释掉了
//for i := 0; i <= len(mufeng3); i++ {
// fmt.Println(mufeng3[i])
//}
//fmt.Println("\n")
//使用range的方法
for _, value := range mufeng3 {
fmt.Println(value, "\t")
}
}
注意: 这里是把两种方法写在一起了,所以把上面的for
循环注释掉了 。
推荐使用for range
的方式。
补充: 使用fmt输出数组相关的信息:
package main
import "fmt"
func main() {
var mufeng3 = [5]int{1, 2, 3, 4, 5}
fmt.Println(mufeng3)
fmt.Printf("%#v", mufeng3)
fmt.Printf("\n")
fmt.Printf("%T", mufeng3)
}
输出结果:
[1 2 3 4 5]
[5]int{1, 2, 3, 4, 5}
[5]int
五 . 二维数组
5.1 二维数组的介绍
有一个下标,我们叫一维数组,有两个下标的就是二维数组,一般日常开发中,用到三维数组以上的就比较少了。
二维数组的案例:
package main
import "fmt"
func main() {
var mufeng [3][4]int
mufeng[1][2] = 3
mufeng[2][1] = 4
fmt.Println(mufeng)
}
// 执行结果:
//[[0 0 0 0] [0 0 3 0] [0 4 0 0]]
为了便于理解,在这里我们把[1][2]
,定义为 第一个是[1]
是a,第二个是[2]
是b.
可以看到我们定义的mufeng[1][2] = 3
,实际上就是 a1的b2的位置等于3. 如图所示:
5.2 二维数组的遍历
package main
import "fmt"
func main() {
//一维数组定义
//var 数组名 [元素个数] 数据类型
//二维数组
//var 数组名 [行个数][列个数] 数据类型
var mufeng [3][4]int
// 通过行和列的下标找到具体元素
mufeng[1][2] = 1 //赋值操作
mufeng[2][1] = 13
mufeng[0][3] = 33
//fmt.Print(arr)
for i := 0; i < 3; i++ {
for j := 0; j < 4; j++ {
fmt.Print(mufeng[i][j], " ")
}
fmt.Println()
}
}
执行结果:
0 0 0 33
0 0 1 0
0 13 0 0
总结
以上就是今天的全部内容,希望对你有用。
💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
💕 本文由沐风晓月原创,首发于CSDN博客, 博客主页:mufeng.blog.csdn.net
💕 日拱一卒无尽有,功不唐捐终入海
💕 喜欢的话记得点赞收藏哦