005.Go语言中的数组

目录

1.初识数组

2.数组的静态初始化

3.遍历数组

4.数组是值类型 

5.冒泡排序

6.多维数组


1.初识数组

func main() {
	/*
		1.数组的概念:
			数组是一组相同数据的集合,数组的长度是固定的,数组中存储的数据是有序的,数组的下标是从0开始的
		2.数组的声明格式:
			var 数组名 [数组长度]数据类型
		3.常用方法:
			获取数组长度:len(数组名)
			获取数组容量:cap(数组名)
	*/
	var arr [5]int
	fmt.Println(arr) //数组未指定数值默认是类型的默认值 [0 0 0 0 0]
	fmt.Printf("数组的长度:%d,数组的容量:%d,数组的数据类型:%T\n", len(arr), cap(arr), arr)
	arr = [5]int{1, 2, 3, 4}
	fmt.Println(arr) //一次给数组中多个元素赋值 [1 2 3 4]
	arr[4] = 5
	fmt.Println(arr) //给数组中单个元素赋值 [1 2 3 4 5]
}

2.数组的静态初始化

func main() {
	//1.普通方式
	var arr1 = [5]int{1, 2, 3, 4, 5}
	fmt.Println(arr1) //[1 2 3 4 5]
	
	//2.简化方式
	arr2 := [10]string{"张三", "李四", "王五", "赵六"}
	fmt.Println(arr2) //[张三 李四 王五 赵六      ]
	
	//3.自动计算数组长度...
	arr3 := [...]bool{true, false}
	fmt.Println(arr3)      //[true false]
	fmt.Println(len(arr3)) //2
	
	//4.给数组中指定下标赋值
	arr4 := [5]int{0: 100, 4: 400}
	fmt.Println(arr4) //[100 0 0 0 400]
}

3.遍历数组

func main() {
	arr := [...]int{'h', 'e', 'l', 'l', 'o', ',', 'G', 'o'}
	//1.fori方式
	for i := 0; i < len(arr); i++ {
		fmt.Printf("i=%d,v=%c\n", i, arr[i])
	}
	fmt.Println("============")
	//2.for方式 快捷键 数组名.for
	for i := range arr {
		fmt.Printf("i=%d,v=%c\n", i, arr[i])
	}
	fmt.Println("============")
	//forr方式 快捷键 数组名.forr
	for i, v := range arr {
		fmt.Printf("i=%d,v=%c\n", i, v)
	}
}

4.数组是值类型 

// 值类型:变量赋值时,新的变量会开辟一个单独的内存空间,新旧数组之间不会相互影响
func main() {
	arr1 := [...]int{10, 20, 30, 40}
	arr2 := arr1
	fmt.Printf("arr1:%d,地址值:%p\n", arr1, &arr1) //arr1:[10 20 30 40],地址值:0xc0000121a0
	fmt.Printf("arr2:%d,地址值:%p\n", arr2, &arr2) //arr2:[10 20 30 40],地址值:0xc0000121c0
	fmt.Println("===========")
	arr1[0] = 100
	fmt.Printf("arr1:%d,地址值:%p\n", arr1, &arr1) //arr1:[100 20 30 40],地址值:0xc0000121a0
	fmt.Printf("arr2:%d,地址值:%p\n", arr2, &arr2) //arr2:[10 20 30 40],地址值:0xc0000121c0
}

5.冒泡排序

func main() {
	arr := [...]int{1, 7, 5, 4, 6, 3}
	fmt.Println("初始数组:", arr)
	//升序
	for i := 0; i < len(arr)-1; i++ {
		var num int //优化遍历次数,如果此次遍历没有数据移动,证明已经排好了
		for j := 0; j < len(arr)-1-i; j++ {
			if arr[j] > arr[j+1] {
				arr[j+1], arr[j] = arr[j], arr[j+1]
				num++
			}
		}
		if num == 0 {
			break
		}

	}
	fmt.Println("升序:", arr)
	//降序
	for i := 0; i < len(arr)-1; i++ {
		var num int //优化遍历次数,如果此次遍历没有数据移动,证明已经排好了
		for j := 0; j < len(arr)-1-i; j++ {
			if arr[j] < arr[j+1] {
				arr[j+1], arr[j] = arr[j], arr[j+1]
				num++
			}
		}
		if num == 0 {
			break
		}
	}
	fmt.Println("降序:", arr)
}

6.多维数组

func main() {
	//定义一个三行四列的二维数组
	arr := [3][4]int{
		{1, 2, 3, 4},
		{10, 20, 30, 40},
		{100, 200, 300, 400}}
	//取出 1和30
	fmt.Println(arr[0][0], " ", arr[1][2])
	//二维数组遍历:以forr为例
	for _, v1 := range arr {
		for _, v2 := range v1 {
			fmt.Println(v2)
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值