热门IT资讯网

go 的数组和切片

发表于:2024-11-24 作者:热门IT资讯网编辑
编辑最后更新 2024年11月24日,什么是数组?数组数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成数组定义的方法?方式一package mainimport "fmt"func arraytest()

什么是数组?

数组

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成

数组定义的方法?

方式一

package mainimport "fmt"func arraytest()  {    var x [3] int    fmt.Println(x) }// 输出 [0 0 0]func main()  {    arraytest()    }

使用快速声明数组

x3 :=[3] int {112,78}fmt.Println(x3) 输出 [112 78 0]

// 数组值的获取

var x2[3] int    x2[0] = 1 //第一个元素    x2[1] = 11    x2[2] = 22     fmt.Println(x2) 输出 [1 11 22]

// 使用for 循环获取数组的数据

 x6 :=[...] int {3,5,6,82,34}    for i :=0; i< len(x6);i++{        fmt.Println(i,x6[i])    }    // 输出   如下 0 表示索引号, 3表示 对应的具体值 0 3 1 5 2 6 3 82 4 34

// go 语言中提供使用range 的方式获取

for i,v := range x6{fmt.Printf("%d of x6 is %d\n",i,v)}// 输出 0 31 52 63 824 34

// 只访问元素

for _,v1 :=range x6 {    fmt.Printf("x6 array value is %d\n",v1)}// 输出0 of x6 is 31 of x6 is 52 of x6 is 63 of x6 is 824 of x6 is 34

切片

什么是切片(slice)?

切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合

// 切片的定义

package main
import "fmt"

func slicetest() {
a1 :=[4] int {1,3,7,22}
fmt.Println(a1)

// 输出[1 3 7 22]var b1 []int = a1[1:4]fmt.Println(b1,len(b1)) // 输出[3 7 22] 3

}

func main() {
slicetest()
}

// 使用make 声明切片
make 初始化函数切片的时候,如果不指明其容量,那么他就会和长度一致,如果在初始化的时候指明了其容量

 s1 :=make([]int, 5)     fmt.Printf("The length of s1: %d\n",len(s1)) # 长度    fmt.Printf("The capacity of; s1: %d\n",cap(s1)) # cap 容量    fmt.Printf("The value of s1:%d\n",s1)    // 输出     The length of s1: 5The capacity of; s1: 5The value of s1:[0 0 0 0 0]    s12 :=make([]int, 5,8) # 指明长度为 5, 容量为8    fmt.Printf("The length of s12: %d\n",len(s12))    fmt.Printf("The capacity of; s12: %d\n",cap(s12))    fmt.Printf("The value of s12:%d\n",s12)    // 输出    The length of s12: 5The capacity of; s12: 8The value of s12:[0 0 0 0 0]// s3 := []int{1, 2, 3, 4, 5, 6, 7, 8}s4 := s3[3:6]fmt.Printf("The length of s4: %d\n", len(s4))fmt.Printf("The capacity of s4: %d\n", cap(s4))fmt.Printf("The value of s4: %d\n", s4)// 输出The length of s4: 3  # 长度为3 The capacity of s4: 5 # 容量为5  The value of s4: [4 5 6]  // 切片与数组的关系切片的容量可以看成是底层数组元素的个数s4 是通过s3 切片获得来的,所以s3 的底层数组就是s4 的底层数组,切片是无法向左拓展的,所以s4 无法看到s3 最左边的三个元素,所以s4 的容量为5

// 切片的获取

before_slice :=[] int {1,4,5,23,13,313,63,23}after_slice := before_slice[3:7]fmt.Println("array before change",before_slice)// 使用for range 遍历for i := range after_slice{    after_slice[i]++}fmt.Println("after cahnge",before_slice)

// 输出

array before change [1 4 5 23 13 313 63 23]
after cahnge [1 4 5 24 14 314 64 23]

数组和切片的区别

容量是否可伸缩 ? 数组容量不可以伸缩,切片可以

是否可以进行比较? // 相同长度的数组可以进行比较

0