九 Go语言之数据格式

前面我们已经学习了一些简单的基本类型,现在学习复合类型,复合类型主要包括了数组,指针,切片等。现在先来学习数组.

一 数组

如果要存储班级里所有学生的数学成绩,应该怎样存储呢?可能有同学说,通过定义变量来存储。但是,问题是班级有80个学生,那么要定义80个变量吗?

像以上情况,最好是通过数组的方式来存储。
所谓的数组:是指一系列同一类型数据的集合。

1.1 数组定义

var a [10]int

数组定义也是通过var 关键字,后面是数组的名字a,长度是10,类型是整型。表示:数组a能够存储10个整型数字。也就是说,数组a的长度是10。
我们可以通过len( )函数测试数组的长度,如下所示:

var a [10]int
fmt.Println(len(a))

当定义完成数组a后,就在内存中开辟了10个连续的存储空间,每个数据都存储在相应的空间内,数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。
注意:数组的长度只能是常量。以下定义是错误的:

var n int = 10
var a [n]int

1.2 数组赋值

数组定义完成后,可以对数组进行赋值操作。
数组是通过下标来进行操作的,下标的范围是从0开始到数组长度减1的位置。
在这里插入图片描述
var a[10] int 表示的范围是a[0],a[1],a[2]…,a[9]
完成对数组赋值的第一种方法:
在这里插入图片描述
但是这种赋值方式比较麻烦,所以可以使用第二种赋值方式,如下所示:
在这里插入图片描述
通过for循环完成数组的赋值与输出。注意:循环的条件,如果将循环条件修改成i<=10是否正确
在上一节中,我们说过可以通过len( )函数来获取 数组的长度,所以也可以对上面的程序,进行如下的修改:
在这里插入图片描述
对数组中的数据输出,也可以使用range.如下所示:
在这里插入图片描述
i变量存储的是数组的下标,data变量存储的是数组中的值。
如果只想输出数组中的元素值,不希望输出下标,可以使用匿名变量
在这里插入图片描述
上面的案例中,首先完成了数组的赋值,然后再输出数组中的值。但是,如果定义完成数组后,没有赋值,直接输出会出现什么样的问题呢?

func main() {
    
    
	var a[10] int
	for i :=0;i<len(a);i++{
    
    
		fmt.Println(a[i])
	}
}

结果
在这里插入图片描述

a数组中的元素类型是整型,定义完成后,直接输出,结果全部是0.
当然数组中存储的元素类型也可以是其它类型,如下所示:
var a [10]float64//如果不赋值,直接输出,结果默认全部是0
vara[10]string//如果不赋值,直接输出,结果默认全部是空字符
var a [10]bool//如果不赋值,直接输出,结果默认全部是false.

1.3 数组初始化

上一小节中,首先先定义数组,然后再完成数组的赋值。其实,在定义数组时,也可以完成赋值,这种情况叫做数组的初始化。
具体案例如下:
在这里插入图片描述

1.4 数组练习

1.4.1 从一个整数数组中取出最大的整数,最小整数,总和,平均值。

代码如下:
在这里插入图片描述
结果
在这里插入图片描述
通过观察发现该程序输出的结果没有问题。
但是,现在将程序进行如下修改:将数组中的0元素删除,同时将数组的长度修改为5.
在这里插入图片描述
运行以上程序,结果如下:
在这里插入图片描述
思考:数组中没有0,为什么输出的结果中最小值为0呢?

现在,在将程序进行如下修改:将数组中的数据全部修改成负数。
在这里插入图片描述
运行该程序,结果输出:
在这里插入图片描述
思考:数组中没有0,为什么输出的结果中最大值为0呢?

应该怎样解决如上的问题呢?将程序修改如下:
在这里插入图片描述

1.4.2 数组里面都是人的名字,分割成:例如:老王|王叔|王哥…

代码如下
在这里插入图片描述
结果
在这里插入图片描述
现在将最后一个“|”去掉,程序应该怎样进行修改?
具体思路:首先通过循环的方式取出数组中前两个元素,分别链接”|” ,存储到变量str中。然后获取最后一个元素,不需要链接“|”,直接与str链接就可以了。获取names数组中最后一个元素的方式:
通过len(names)计算出数组的长度,然后减去1, 就是数组中最后一个元素的下标(数组的下标是从0开始计算)。所以取出最后一个元素的方式为:names[len(names)-1]
在这里插入图片描述

おすすめ

転載: blog.csdn.net/qq_33417321/article/details/115057349