文章

数组

什么是数组

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)
}

image-20221218223231775

数组的定义:

  • 数组是相同类型数据的有序集合
  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
  • 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们

数组的基本特点:

  1. 其长度是确定的,数组一旦被创建,它的大小就是不可以改变的
  2. 其元素必须是相同类型,不允许出现混合类型

初始化数组

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)
}

image-20221219094252247

遍历数组元素

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)
   }
}

image-20221219101442131

数组排序-冒泡排序

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)
}

image-20221219104826638

多维数组

多维数组声明方式:

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)
      }
   }
}

image-20221219115215386

License:  CC BY 4.0 test