Go 数组的引入、定义与使用

数组的引入

  • 引例
    • 一个养鸡场有6只鸡,它们的体重分别是3kg,5kg,1kg, 3.4kg,2kg,50kg 。请问这六只鸡的总体重是多少?平均体重是多少? 请编一个程序。
//思路分析:定义六个变量,分别表示六只鸡的,然后求出和,然后求出平均值。
hen1 := 3.0 
hen2 := 5.0
hen3 := 1.0 
hen4 := 3.4 
hen5 := 2.0 
hen6 := 50.0

totalWeight := hen1 + hen2 + hen3 + hen4 + hen5 + hen6
//fmt.Sprintf("%.2f", totalWeight / 6) 将 totalWeight / 6 四舍五入保留到小数点2返回值
avgWeight := fmt.Sprintf("%.2f", totalWeight / 6)
fmt.Printf("totalWeight=%v avgWeight=%v\n", totalWeight, avgWeight)
  • 对上面代码的说明
    • 使用传统的方法不利于数据的管理和维护. 
    • 传统的方法不够灵活,因此我们引出需要学习的新的数据类型=>数组

数组介绍

  • 数组可以存放多个同一类型数据。数组也是一种数据类型,在 Go 中,数组是值类型
  • 使用数组的方法来解决养鸡场的问题.
-- 1.定义一个数组
var hens [7]float64
-- 2.给数组的每个元素赋值, 元素的下标是从0开始的  0-5
hens[0] = 3.0  //hens数组的第一个元素 hens[0]
hens[1] = 5.0  //hens数组的第2个元素 hens[1]
hens[2] = 1.0 
hens[3] = 3.4 
hens[4] = 2.0 
hens[5] = 50.0 
hens[6] = 150.0  //增加一只鸡
-- 3.遍历数组求出总体重
totalWeight2 := 0.0 
for i := 0; i < len(hens); i++ {
	totalWeight2 += hens[i]
}

-- 4.求出平均体重
avgWeight2 := fmt.Sprintf("%.2f", totalWeight2 / float64(len(hens))) 
fmt.Printf("totalWeight2=%v avgWeight2=%v", totalWeight2, avgWeight2)
  • 对上面代码的总结
    • 使用数组来解决问题,程序的可维护性增加.
    • 而且方法代码更加清晰,也容易扩展。

数组定义和内存布局

  • 数组的定义
    • var 数组名 [数组大小]数据类型
      • var a [5]int
      • 赋初值 a[0] = 1   a[1] = 30 .... 
  • 数组在内存布局
var intArr [3]int -- int占8个字节
-- 当我们定义完数组后,其实数组的各个元素有默认值 0
fmt.Println(intArr)
intArr[0] = 10
intArr[1] = 20
intArr[2] = 30
fmt.Println(intArr)
fmt.Printf("intArr的地址=%p intArr[0] 地址%p intArr[1] 地址%p intArr[2] 地址%p\n",
	&intArr, &intArr[0], &intArr[1], &intArr[2])

  • 对上图的总结:
    • 数组的地址可以通过数组名来获取 &intArr
    • 数组的第一个元素的地址,就是数组的首地址
    • 数组的各个元素的地址间隔是依据数组的类型决定,比如 int64 -> 8 int32->4...

数组的使用

  • 访问数组元素
    • 数组名[下标]
      • 比如:你要使用 a 数组的第三个元素 a[2]
  • 演示案例:
    • 从终端循环输入 5 个成绩,保存到 float64 数组,并输出.
-- 从终端循环输入5个成绩,保存到float64数组,并输出
 var score [5]float64

 for i := 0; i < len(score); i++ {
 	fmt.Printf("请输入第%d个元素的值\n", i+1)
 	fmt.Scanln(&score[i])
 }

-- 变量数组打印
 for i := 0; i < len(score); i++ {
 	fmt.Printf("score[%d]=%v\n", i, score[i])
 }

  • 四种初始化数组的方式
var numArr01 [3]int = [3]int{1, 2, 3}
fmt.Println("numArr01=", numArr01)

var numArr02 = [3]int{5, 6, 7}
fmt.Println("numArr02=", numArr02)

-- 这里的 [...] 是规定的写法
var numArr03 = [...]int{8, 9, 10}
fmt.Println("numArr03=", numArr03)

var numArr04 = [...]int{1: 800, 0: 900, 2:999}
fmt.Println("numArr04=", numArr04)

-- 类型推导
strArr05 := [...]string{1: "tom", 0: "jack", 2:"mary"}
fmt.Println("strArr05=", strArr05)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值