go语言初识(四)

本博客涉及内容:数组

数组

数组定义

在 go 语言中,数组是一种固定大小的数据结构,用于存储相同类型的元素。数组的定义方式如下:

var arrayName [size]Type

可以通过len()函数测试数组的长度:

func main() {
	var a [10]int
	fmt.Println(len(a))
}

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

1. 数组赋值

数组定义完成后,可以对数组进行赋值操作。数组是通过下标来进行操作的,下标范围是从0开始到数组长度减1的位置。

完成数组赋值的第一种方式

//	完成数组赋值的第一种方式
	a[0] = 100
	a[1] = 200
	a[2] = 300
	a[3] = 400
	a[4] = 500
	a[5] = 600
	a[6] = 700
	a[7] = 800
	a[8] = 900
	a[9] = 1000

完成数组赋值的第二种方式

for i := 0; i < 10; i++ {
		a[i] = i
	}

【注】如果数组不进行赋值,默认全是0

2. 数组初始化

在定义数组时,也可以完成赋值,这种情况叫做数组的初始化。

// 全部初始化
	var b [5]int = [5]int{1, 2, 3, 4, 5}
	fmt.Println(b)

	c := [5]int{1, 2, 3, 4, 5}
	fmt.Println(c)

	// 部分初始化,没有初始化的元素,自动赋值为0
	d := [5]int{1, 2, 3}
	fmt.Println(d)

	// 指定某个元素初始化
	e := [5]int{2: 10, 4: 20}
	fmt.Println(e)

3. 数组求值

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

func main() {
	/*
		练习1:从一个整数数组中取出最大的整数、最小整数、总和、平均值
		1、全部初始化
		2、声明两个变量来存储最大值和最小值
		3、循环数组,将数组中的每个元素值与最大值和最小值进行比较
	*/
	var a [6]int = [6]int{1, 2, 3, 4, 5, 6}
	var max int = a[0]
	var min int = a[0]
	var sum int //存储和

	for i := 0; i < len(a); i++ {
		if max < a[i] {
			max = a[i]
		}
		if min > a[i] {
			min = a[i]
		}
		sum += a[i]
	}
	fmt.Printf("max: %d, min: %d, sum: %d\n", max, min, sum)
}

首先我们先初始化一个数组,然后定义两个变量maxmin分别存储最大值和最小值。将a[0]赋值给它们是因为变量未赋值的时候默认零值。使用for进行循环,在循环的过程中进行判断,如果a[i]>max,则将a[i]的值赋值给max(min同理)。最后使用fmt.Printf进行格式化输出。
练习二:将数组中的元素进行分割。

names := [...]string{"罗辑", "史强", "叶文洁", "章北海"}
	var str string
	for i := 0; i < len(names)-1; i++ {
		str += names[i] + "|"
	}
	fmt.Println(str + names[len(names)-1])

使用for循环将其中的各个数组单独取出来。

4. 数组逆置

将一个字符串的元素顺序进行反转。

func main() {
	a := []int{1, 2, 3, 4, 5}
	var temp int // 定义中间变量,负责交换
	for i := 0; i < len(a)/2+1; i++ {
		temp = a[i]
		a[i] = a[len(a)-i-1]
		a[len(a)-i-1] = temp
	}
	fmt.Println(a)
}

定义一个临时变量用于交换,注意在for循环中是循环到中间加一的部分,而不是完成整个循环。

5.冒泡排序

具体的请参考B站视频

func main() {
	var num [10]int = [10]int{12, 2, 3, 45, 51, 6, 37, 28, 19, 10}
	var temp int = num[0]
	for i := 0; i < len(num); i++ {
		for j := 0; j < len(num)-i-1; j++ {
			if num[j] < num[j+1] {
				temp = num[j]
				num[j] = num[j+1]
				num[j+1] = temp
			}
		}
	}
	fmt.Println(num)
}

6.数组作为函数参数

数组也可以像变量一样,作为参数传递给函数。用法如下:

package main

import "fmt"

/*
数组作为参数进行传递
*/

func modify(a [5]int) {
	a[0] = 100 // 修改a[0]的值
	fmt.Println("modify a:", a[0])
}
func main() {
	a := [5]int{1, 2, 3, 4, 5}
	modify(a)
	fmt.Println(a)
}

但是输出结果并没有影响到原来的值,涉及到值传递和引用传递,指针会对这个问题进行说明。也可参考C语言指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值