go 的数组和切片

什么是数组?

数组

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

数组定义的方法?

方式一

package main
import "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 3
1 5
2 6
3 82
4 34

// 只访问元素

for _,v1 :=range x6 {
    fmt.Printf("x6 array value is %d\n",v1)
}
// 输出

0 of x6 is 3
1 of x6 is 5
2 of x6 is 6
3 of x6 is 82
4 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: 5
The capacity of; s1: 5
The 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: 5
The capacity of; s12: 8
The 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]

数组和切片的区别

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

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

原文地址:https://blog.51cto.com/sdsca/2464815

时间: 2024-08-26 22:12:22

go 的数组和切片的相关文章

GoLang笔记-数组和切片,本质是就是长度不可变的可变的区别

数组 Arrays 数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值.在初始化后长度是固定的,无法修改其长度.当作为方法的入参传入时将复制一份数组而不是引用同一指针.数组的长度也是其类型的一部分,通过内置函数len(array)获取其长度. 初始化 数组的初始化有多种形式,查看示例代码 , 在线运行示例代码 [5] int {1,2,3,4,5} 长度为5的数组,其元素值依次为:1,2,3,4,5 [5] int {1,2} 长度为5的数组

GO语言总结(3)——数组和切片

上篇博文简单介绍了一下Go语言的基本类型——GO语言总结(2)——基本类型,本篇博文开始介绍Go语言的数组和切片. 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式:[length]Type .[N]Type{value1, value2, ... , valueN}.[...]Type{value1, value2, ... , valueN} 如下: func test5() { var iarray1 [5]int32

go的数组和切片

对于GO的数组和切片的初步了解, 切边是数组的一个指针,切片的初始化有三种:一种是通过make,即 slice := make([]int,5,10) 另一种是通过:=指向一个已经存在的数组.即 slice := []int {1,2,3,4,5,6} 切片的切片不可初始化超过原始切片的cap值,比如: sliceA := make([]int,5,10) sliceB := sliceA[:11] 这个是不行的,11超过了sliceA的cap值(10),会报运行时异常. 对切片的append,

Go - 数组 和 切片

一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建 数组有 3 种创建方式: 1) [length]Type 2) [length]Type{value1, value2, ... , valueN} 3) [...]Type{value1, value2, ... , valueN} 如下: func test5() { var arr1 [5]int32 var arr2 [5]int32 = [5]int32{1, 2, 3, 4, 5} a

Go数组、切片、映射的原理--简明解析

数组.切片.映射是Golang的最重要的数据结构,下面是对这3种数据结构的一点个人总结: 一.数组 数组是切片和映射的基础数据结构. 数组是一个长度固定的数据类型,存储着一段具有相同数据类型元素的连续内存块. 因为数组占用的内存是连续分配的,所以对数组的操作速度很快. 声明数组的方式:4种 var array1 [5]int array1 := [5]int{3,5,6,3,2} array1 := [...]int{3,4,7,8,1} //根据数组字面量中元素的个数来确定数组的长度 arra

GO的数组及切片

感觉在向PYTHON学一些数组方面的功能. package main import "fmt" func main() { var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} var mySlice []int = myArray[:5] fmt.Println("Elements of myArray: ") for _, v := range myArray { fmt.Print(v, &q

python运算学习之Numpy ------ 数组的切片索引与循环遍历、条件和布尔数组、

数组的切片索引: 数组的切片索引和列表非常类似,下面用代码简单说明 1 a = np.random.rand(16).reshape(4, 4) 2 print("数组a:\n", a) 3 print(a[-1][1:4]) 4 Out[1]: 5 数组a: 6 [[0.04175379 0.43013992 0.5398909 0.40638248] 7 [0.3305902 0.11958799 0.48680358 0.30755734] 8 [0.00893887 0.384

go 语言学习 - 数组和切片

package main import "fmt" func main(){ //数组 var a = [3]int{}//相当于[3]int{0,0,0} a[0] = 1 changeArray(a) fmt.Println(a) b := [...]int{1,2,3}//省略号符号表示让编译器根据后面初始化情况自动计算数组的长度,但这个长度是编译时确定的 fmt.Println(b) c := new([3]int) //new 返回的是地址,但是一样可以用 pointName

Go语言入门——数组、切片和映射

按照以往开一些专题的风格,第一篇一般都是“从HelloWorld开始” 但是对于Go,思来想去,感觉真的从“HelloWorld”说起,压根撑不住一篇的篇幅,因为Go的HelloWorld太简单了. 1.简介 Go是什么? Go(又称Golang)是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言.——摘自百度百科 Github地址 https://github.com/golang/go 官网地址 https://golang.org 中文网社区 https://

数组和切片

实际上就是个数组.底层是一个数组,切片内有这个数组引用,和切片的信息.var arrAge = [5]int{18, 20, 15, 22, 16}var arrLazy = [...]int{5, 6, 7, 8, 22}//...可以忽略var arrKeyValue = [5]string{3: "Chris", 4: "Ron"}切片; x.y是切片改变x.y就是改变数组,向x.y添加数据也是改变数组. make创建一个切片:make([]int,len,c