目录
1.初识数组
func main() {
/*
1.数组的概念:
数组是一组相同数据的集合,数组的长度是固定的,数组中存储的数据是有序的,数组的下标是从0开始的
2.数组的声明格式:
var 数组名 [数组长度]数据类型
3.常用方法:
获取数组长度:len(数组名)
获取数组容量:cap(数组名)
*/
var arr [5]int
fmt.Println(arr) //数组未指定数值默认是类型的默认值 [0 0 0 0 0]
fmt.Printf("数组的长度:%d,数组的容量:%d,数组的数据类型:%T\n", len(arr), cap(arr), arr)
arr = [5]int{1, 2, 3, 4}
fmt.Println(arr) //一次给数组中多个元素赋值 [1 2 3 4]
arr[4] = 5
fmt.Println(arr) //给数组中单个元素赋值 [1 2 3 4 5]
}
2.数组的静态初始化
func main() {
//1.普通方式
var arr1 = [5]int{1, 2, 3, 4, 5}
fmt.Println(arr1) //[1 2 3 4 5]
//2.简化方式
arr2 := [10]string{"张三", "李四", "王五", "赵六"}
fmt.Println(arr2) //[张三 李四 王五 赵六 ]
//3.自动计算数组长度...
arr3 := [...]bool{true, false}
fmt.Println(arr3) //[true false]
fmt.Println(len(arr3)) //2
//4.给数组中指定下标赋值
arr4 := [5]int{0: 100, 4: 400}
fmt.Println(arr4) //[100 0 0 0 400]
}
3.遍历数组
func main() {
arr := [...]int{'h', 'e', 'l', 'l', 'o', ',', 'G', 'o'}
//1.fori方式
for i := 0; i < len(arr); i++ {
fmt.Printf("i=%d,v=%c\n", i, arr[i])
}
fmt.Println("============")
//2.for方式 快捷键 数组名.for
for i := range arr {
fmt.Printf("i=%d,v=%c\n", i, arr[i])
}
fmt.Println("============")
//forr方式 快捷键 数组名.forr
for i, v := range arr {
fmt.Printf("i=%d,v=%c\n", i, v)
}
}
4.数组是值类型
// 值类型:变量赋值时,新的变量会开辟一个单独的内存空间,新旧数组之间不会相互影响
func main() {
arr1 := [...]int{10, 20, 30, 40}
arr2 := arr1
fmt.Printf("arr1:%d,地址值:%p\n", arr1, &arr1) //arr1:[10 20 30 40],地址值:0xc0000121a0
fmt.Printf("arr2:%d,地址值:%p\n", arr2, &arr2) //arr2:[10 20 30 40],地址值:0xc0000121c0
fmt.Println("===========")
arr1[0] = 100
fmt.Printf("arr1:%d,地址值:%p\n", arr1, &arr1) //arr1:[100 20 30 40],地址值:0xc0000121a0
fmt.Printf("arr2:%d,地址值:%p\n", arr2, &arr2) //arr2:[10 20 30 40],地址值:0xc0000121c0
}
5.冒泡排序
func main() {
arr := [...]int{1, 7, 5, 4, 6, 3}
fmt.Println("初始数组:", arr)
//升序
for i := 0; i < len(arr)-1; i++ {
var num int //优化遍历次数,如果此次遍历没有数据移动,证明已经排好了
for j := 0; j < len(arr)-1-i; j++ {
if arr[j] > arr[j+1] {
arr[j+1], arr[j] = arr[j], arr[j+1]
num++
}
}
if num == 0 {
break
}
}
fmt.Println("升序:", arr)
//降序
for i := 0; i < len(arr)-1; i++ {
var num int //优化遍历次数,如果此次遍历没有数据移动,证明已经排好了
for j := 0; j < len(arr)-1-i; j++ {
if arr[j] < arr[j+1] {
arr[j+1], arr[j] = arr[j], arr[j+1]
num++
}
}
if num == 0 {
break
}
}
fmt.Println("降序:", arr)
}
6.多维数组
func main() {
//定义一个三行四列的二维数组
arr := [3][4]int{
{1, 2, 3, 4},
{10, 20, 30, 40},
{100, 200, 300, 400}}
//取出 1和30
fmt.Println(arr[0][0], " ", arr[1][2])
//二维数组遍历:以forr为例
for _, v1 := range arr {
for _, v2 := range v1 {
fmt.Println(v2)
}
}
}