数组
一维数组
定义一维数组的语法是:
arr := [元素个数]元素类型{元素列表}
示例:定义和遍历一维数组
package main import "fmt" func main() { arr := [3]int{1, 2, 3} for _, v := range arr { fmt.Println(v) } }
二维数组
定义二维数组的语法是:
arr := [外层元素个数][内层元素个数]元素类型{元素列表}
示例:定义和遍历二维数组
package main import "fmt" func main() { arr := [3][3]int{ {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, } for _, v := range arr { for _, vv := range v { fmt.Print(vv, "\t") } fmt.Print("\n") } }
切片
切片的定义
切片是基于数组的一种动态数据类型,能够动态的修改其长度,非常的灵活。
示例:创建一维和二维的切片
package main import "fmt" func main() { // 一维切片 arr1 := []int{1, 2, 3, 4} for _, v := range arr1 { fmt.Println(v) } // 二维切片 arr := [][]int{ {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, } for _, v := range arr { for _, vv := range v { fmt.Print(vv, "\t") } fmt.Print("\n") } }
切片增删改查
切片是Go语言中非常常用的一种数据结构,掌握其常用的增删改查方法非常有必要。
示例:切片的增删改查
package main import "fmt" func main() { // 定义切片 var arr []string // 添加 arr = append(arr, "a") arr = append(arr, "b", "c") fmt.Println(arr) // 删除 index := 1 arr = append(arr[:index], arr[index+1:]...) fmt.Println(arr) // 修改 arr[index] = "cc" fmt.Println(arr) // 查询 fmt.Println(arr[0]) }
切片的复制
示例代码1:使用append方法
package main import "fmt" func main() { arr := []string{"a", "b", "C"} // 复制 var arr1 []string arr1 = append(arr1, arr...) fmt.Println(arr1) fmt.Println(arr) }
示例代码2:使用copy方法
package main import "fmt" func main() { arr := []string{"a", "b", "C"} // 复制 var arr1 = make([]string, len(arr)) copy(arr1, arr) fmt.Println(arr1) fmt.Println(arr) }
切片的排序
示例1:整数切片的排序
package main import ( "fmt" "sort" ) func main() { arr := []int{33, -11, 11, 22} fmt.Println(arr) // 排序 sort.Ints(arr) fmt.Println(arr) }
示例代码2:自定义类型排序
package main import ( "fmt" "sort" ) type Person struct { Name string Age int } func main() { arr := []Person{ {"张三", 22}, {"李四", 21}, {"王五", 23}, } fmt.Println(arr) // 排序:根据年龄降序 sort.Slice(arr, func(i, j int) bool { return arr[i].Age > arr[j].Age }) fmt.Println(arr) }