数组
文章目录
- 数组
- 一、数组是什么
- 二、初始化数组
- 三、数组的遍历
- 四、数组类型
- 五、数组排序
一、数组是什么
Go 语言提供了数组类型的 数据结构。
-
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型。例如整型、字符串或者自定义类型。
-
数组元索可以通过索引(位置) 来读取(或者修改) ,索引从 0 开始,第一个元索索引为0,第二个索引为1,以此类推。数组的下标取值范国是从0开始,到长度减一。
数组一旦定义后,大小不能改变.
数组声明
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:
var 变量名 [大小] 变量类型
package main
import "fmt"
func main() {
// 定义一个数组 var 变量名 [大小]变量类型
var nums [4]int
// 数组的下标是从 0 开始的
nums[0] = 1
nums[1] = 2
nums[2] = 3
nums[3] = 4
fmt.Printf("%T\n", nums)
// 通过下标来获取数组元素
fmt.Println(nums[3])
fmt.Println(nums[2])
fmt.Println(nums[1])
fmt.Println(nums[0])
// 数组常用的方法
// 因为数组是固定长度的,所以长度和容量是相同的
length := len(nums)
capacity := cap(nums)
fmt.Println(length) // 输出长度
fmt.Println(capacity) // 输出容量
// 修改数组的值
fmt.Println(nums)
nums[0] = 6
fmt.Println(nums)
}
数组的定义:
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干个数据,按照一定的先后次序排序组合而成
- 其中,每一个数据称做一个数组元素,每个数组元素可以通过一个下标来访问它们
数组的基本特点:
- 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
- 其元素必须是相同类型,不允许出现混合类型
二、初始化数组
初始化数组中 {} 的元素不能大于 [] 中的数字。
package main
import "fmt"
func main() {
// 常规的初始化
var arr1 = [4]int{1, 2, 3, 4}
fmt.Println(arr1)
fmt.Println(arr1[0])
// 快速定义数组
arr2 := [4]int{5, 6, 7, 8}
fmt.Println(arr2)
fmt.Println(arr2[0])
// 如果不确定数组长度
// 可以使用 ... 代替数组的长度
// 编译器会根据元素个数自行推断数组的长度
arr3 := [...]string{"hello", "world", "!"}
fmt.Println(arr3)
fmt.Println(len(arr3))
fmt.Println(cap(arr3))
// 如果设置了数组的长度,我们可以通过指定下标来初始化元素
arr4 := [4]int{1: 9, 3: 10}
fmt.Println(arr4)
}
输出
三、数组的遍历
package main
import "fmt"
/*
数组的遍历:
依次访问数组中的元素
方法1, arr[0],arr[1],arr[2]....
方法2:通过循环,配合下标
for i:=0;i<len(arr);i++{
arr[i]
}
方法3: range
range:词义“范围”
不需要操作数组的下标,到达数组的末尾,自动结束 for range循环
每次从数组中获取下标和对应位置的数值
*/
func main() {
// 常规的初始化
var arr1 = [4]int{1, 2, 3, 4}
fmt.Println(arr1[0])
fmt.Println(arr1[1])
fmt.Println(arr1[2])
fmt.Println(arr1[3])
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
//采用for循环遍历输出
for i := 0; i < 4; i++ {
fmt.Println(arr1[i])
}
// 快捷键生成 arr1.for
// for range 可以得到 下标(index) 和 下标对应的值(value)
for index, value := range arr1 {
fmt.Println(index, value)
}
}
输出
四、数组类型
package main
import "fmt"
func main() {
num := 8
var arr1 = [4]int{1, 2, 3, 4}
var arr2 = [4]string{"hello", "wrold", "!"}
fmt.Printf("%T", arr1)
fmt.Println()
fmt.Printf("%T", arr2)
// 值类型:拷贝 arr
num2 := num
fmt.Println(num, num2)
num2 = 10
fmt.Println(num, num2)
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>")
arr3 := arr1
fmt.Println(arr1)
fmt.Println(arr3)
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>")
// 改变arr3并没有影响到arr1,数组也是值传递
arr3[0] = 66
fmt.Println(arr1)
fmt.Println(arr3)
}
输出