数组
什么是数组
Go语言提供了数组类型的数据结构
数组是具有相同唯一类型的一组已编号且固定长度的数组项序列,这种类型可以是任意的原始类型如整型、字符串或者自定义类型。
数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为0,第二个索引为1,以此类推。
数组一旦定义后,大小不能改变
数组是值传递类型
声明数组
Go语言数组声明需要指定元素类型及元素个数,语法格式如下:
var 变量名 [大小]变量类型
package main
import "fmt"
func main() {
//定义一个数组
var nums [5]int
nums[0] = 1
nums[1] = 2
nums[2] = 3
nums[3] = 100
fmt.Printf("%T\n", nums)
fmt.Println(nums[1])
fmt.Println(nums[3])
//因为数组是固定长度的,所以长度和容量相同
fmt.Println(len(nums)) //数组长度
fmt.Println(cap(nums)) //数组容量
fmt.Println(nums)
nums[0] = 200
fmt.Println(nums)
}
数组的定义:
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
- 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
数组的基本特点:
- 其长度是确定的,数组一旦被创建,它的大小就是不可以改变的
- 其元素必须是相同类型,不允许出现混合类型
初始化数组
package main
import "fmt"
func main() {
//常规的初始化
var arr1 = [5]int{1, 2, 3, 4, 5}
fmt.Println(arr1)
fmt.Println(arr1[2])
//快速定义数组
arr2 := [5]int{6, 7, 8, 9, 10}
fmt.Println(arr2)
fmt.Println(arr2[2])
//...不确定数组有多大
//编译器会根据元素个数自行推断数组的长度
arr3 := [...]string{"yama", "hello", "lihao"}
fmt.Println(arr3)
fmt.Println(len(arr3))
fmt.Println(cap(arr3))
//给指定的下标赋值
arr4 := [5]int{1: 100, 4: 200}
fmt.Println(arr4)
}
遍历数组元素
package main
import "fmt"
func main() {
arr := [5]int{1, 2, 3, 4, 5}
fmt.Println(arr[0])
fmt.Println(arr[1])
fmt.Println(arr[2])
fmt.Println("==================")
for i := 0; i < 5; i++ {
fmt.Print(arr[i], " ")
}
fmt.Println()
fmt.Println("==================")
//index 下标
//value值
for index, value := range arr {
fmt.Println(index, value)
}
}
数组排序-冒泡排序
package main
import "fmt"
func main() {
arr := [11]int{5, 4, 2, 3, 6, 13, 54, 32, 623, 546, 324}
sort(arr, "asc")
}
func sort(arr [11]int, c string) {
for i := 1; i < len(arr); i++ {
for j := 0; j < len(arr)-i; j++ {
if c == "asc" {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
if c == "desc" {
if arr[j] < arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
}
fmt.Println(arr)
}
多维数组
多维数组声明方式:
var 变量名 [size1][size2]...[sizN] 变量类型
二维数组是最简单的多位数组,二维数组本质上是由一对数组组成的,二维数组定义方式如下:
var 变量名 [x][y] 变量类型
package main
import "fmt"
func main() {
arr := [3][4]int{
{1, 2, 3, 4}, //0
{5, 6, 7, 8}, //1
{9, 10, 11, 12}, //2
}
//访问二维数组,行列
fmt.Println(arr[0][1])
fmt.Println(arr[1][1])
for i := 0; i < 3; i++ {
for j := 0; j < 4; j++ {
fmt.Print(arr[i][j], " ")
}
}
fmt.Println()
for i, v := range arr {
fmt.Println(i, v)
for _, v2 := range v {
fmt.Println(v2)
}
}
}