📜  Go-数组(1)

📅  最后修改于: 2023-12-03 15:01:00.843000             🧑  作者: Mango

Go-数组

简介

数组是一种由相同类型元素组成的固定长度序列。在Go语言中,数组一旦定义后,长度就无法再更改。数组的元素可以是任何基本类型,例如整型、浮点型、布尔型和字符串,也可以是自定义类型。

定义和初始化数组

数组的定义格式为 [n]T,其中 n 表示数组的长度, T 表示数组元素的类型。例如一个长度为3的整型数组定义为:var arr [3]int。数组可以使用一对大括号 {} 进行初始化,多个元素之间使用 , 分隔。

示例代码
var arr1 [3]int // 声明一个长度为3的整型数组,元素默认是0
arr2 := [3]int{1, 2, 3} // 声明一个长度为3的整型数组,并初始化为{1,2,3}
arr3 := [...]int{4, 5, 6} // 声明一个长度不确定的整型数组(根据初始化值来确定长度),并初始化为{4,5,6}
arr4 := [2][3]int{{1, 2, 3}, {4, 5, 6}} // 声明一个二维数组,并初始化为{{1,2,3},{4,5,6}}
数组的基本操作
获取数组长度

可以使用 len() 函数获取数组的长度。

arr := [3]string{"Hello", "World", "!"}
fmt.Println(len(arr)) // 输出 3
遍历数组

在Go语言中,可以使用 for...range 语句遍历数组元素。for...range 的作用是返回两个值,一个是数组元素的下标,另一个是数组元素的值。

arr := [3]string{"Hello", "World", "!"}
for index, value := range arr {
    fmt.Println(index, value)
}
// 输出:
// 0 Hello
// 1 World
// 2 !
访问数组元素

可以使用下标来访问数组元素,下标从0开始。如果尝试访问超过数组长度的下标,编译器会输出运行时错误。

arr := [3]string{"Hello", "World", "!"}
fmt.Println(arr[0]) // 输出 Hello
数组的比较

可以使用 == 操作符比较两个数组是否相等。只有数组元素的顺序、类型、长度都完全相同才会返回 true。

arr1 := [3]string{"Hello", "World", "!"}
arr2 := [3]string{"Hello", "World", "!"}
fmt.Println(arr1 == arr2) // 输出 true
数组作为参数传递

在Go语言中,数组一般作为参数时使用指针。

func PrintArray(arr *[3]string) {
    for _, value := range *arr {
        fmt.Println(value)
    }
}
数组切片

数组切片是一个引用类型,它是对底层数组的一个引用。数组切片的长度是可以变化的,可以使用 append() 函数动态增加元素。

定义和初始化数组切片

数组切片的定义和初始化和数组类似,但是 [] 中不需要指定长度。

var slice1 []int // 定义一个整型数组切片
slice2 := []string{"Hello", "World", "!"} // 声明一个字符串数组切片,并初始化为{"Hello","World","!"}
slice3 := make([]int, 5) // 声明一个整型数组切片,并分配5个元素
slice4 := make([]int, 5, 10) // 声明一个整型数组切片,分配5个元素,容量为10个元素
数组切片的操作

获取数组切片长度和容量

可以使用 len() 函数获取数组切片的长度,使用 cap() 函数获取数组切片的容量。

slice := []int{1, 2, 3, 4, 5}
fmt.Println(len(slice)) // 输出 5
fmt.Println(cap(slice)) // 输出 5

获取数组切片的子集

可以使用 arr[start:end] 语法获取数组切片的子集。

slice := []int{1, 2, 3, 4, 5}
fmt.Println(slice[1:3]) // 输出 [2 3]

动态增加数组切片元素

可以使用 append() 函数动态增加数组切片元素。

slice := []int{1, 2, 3, 4, 5}
slice = append(slice, 6, 7)
fmt.Println(slice) // 输出 [1 2 3 4 5 6 7]

数组切片的复制

可以使用 copy() 函数复制数组切片。

slice1 := []int{1, 2, 3, 4, 5}
slice2 := make([]int, 5)
copy(slice2, slice1)
fmt.Println(slice2) // 输出 [1 2 3 4 5]