Golang基础-数据结构-数组(array)

这篇博客详细介绍了Golang中的数组,包括数组的定义、初始化、遍历方法、多维数组的实现以及数组作为值类型的特点。文章强调了数组长度的固定性,以及在传递和修改数组时需要注意的值复制行为,并给出了使用指针来修改数组的示例。

数组的定义

var 变量名[元素数量(长度)]元素类型
例如:

var a [5]int
var b [4]int

注意
1.数组是多个相同类型数据的组合,一个组合一旦声明或定义,其长度是固定的,不能动态变化
2.数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不可以混用
3.创建后,如果没有赋值,默认零值
4.使用步骤:1.声明数组并开辟空间 2.赋值 3.使用

数组的初始化

var a [5]int//不给值 默认初始化为int类型的零值
var b =[3]int{1,2}//此时数组为 [1 2 0] 没有给指定值用该元素类型的零值填充
var c = [...]int{1,2}// [1 2]  自行判断数组长度长度用...
var d = [...]int{1:2,4:5}//[0 2 0 0 5]  通过指定索引值来初始化

数组的遍历

常见遍历方式

func main(){
	arr := [...]int{2, 4, 6, 8, 10}
	// 遍历1  for循环
	for i := 0; i < len(arr); i++ {
		fmt.Println(arr[i])
	}
	// 2
	// 4
	// 6
	// 8
	// 10

	// for-range
	// 遍历2(常用)
	for i := range arr {
		fmt.Println(arr[i])
	}
	// 2
	// 4
	// 6
	// 8
	// 10

	// 遍历3  索引 值
	for i, v := range arr {
		fmt.Println(i, v)
	}
	// 0 2
	// 1 4
	// 2 6
	// 3 8
	// 4 10

	for _, v := range arr3 {
		fmt.Println(v)
	}
	// 2
	// 4
	// 6
	// 8
	// 10
}

多维数组

指在数组中去嵌套数组
以二维数组为例

func main() {
	var arr [4][6]int
	arr[1][2] = 1
	arr[2][1] = 2
	arr[2][3] = 3
	for i := 0; i < 4; i++ {
		for j := 0; j < 6; j++ {
			fmt.Print(arr[i][j], " ")
		}
		fmt.Println()
	}
	// 0 0 0 0 0 0
	// 0 0 1 0 0 0
	// 0 2 0 3 0 0
	// 0 0 0 0 0 0
}

注意多维数组只有第一层可以用… 来推导数组长度

数组是值类型

赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。

	arr := [3]int{12, 23, 45}
	arr[0] = 88
	fmt.Println(arr)
	// 输出 [12 23 45]

数组的修改

在其他函数中需要修改数组,可以用引用传递(指针)实现

	arr := [3]int{12, 23, 45}
	(*arr)[0] = 88
	fmt.Println(arr)
	// 输出 [88 23 45]

案例

// 案例1 创建一个byte类型的26个元素的数组,分别放置‘A’-‘Z’.使用for循环访问所有元素并打印出来
func demo1() {
	var myCharts [26]byte
	for i := 0; i < 26; i++ {
		myCharts[i] = 'A' + byte(i) //统一数据类型 将i强制转换成byte
	}

	for i := 0; i < 26; i++ {
		fmt.Printf("%c ", myCharts[i])
	}
}

// 案例2 求出一个数组的最大值并得到对应的下标
func demo2() {
	var intarr [5]int
	intarr = [...]int{2, -2, 6, 8, 1}
	maxVal := intarr[0]
	maxValindex := 0
	for i := 1; i < len(intarr); i++ {
		if maxVal < intarr[i] {
			maxVal = intarr[i]
			maxValindex = i
		}
	}
	fmt.Printf("maxVal=%v maxValindex=%v ", maxVal, maxValindex)
}

// 案例3 求出一个数组的和 以及平均值 for-range
func demo3() {
	var arr01 [6]int
	arr01 = [...]int{12.0, 5.0, 6.0, 8.0, 9.0, 55.0}
	var total = 0
	for _, v := range arr01 {
		total = total + v
	}
	fmt.Printf("total=%v 平均值=%v", total, float32(total)/float32(len(arr01)))
}

func main() {
	demo1()
	// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
	fmt.Println()
	demo2()
	// maxVal=8 maxValindex=3
	fmt.Println()
	demo3()
	// total=95 平均值=15.833333
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值