Golang 之 数组和切片

数组(Array)

  • 数组是同一类元素的集合,在使用前需要先声明,可以修改数组中的元素,但是数组的长度是不可变的。
//定义个数组
// var 数组变量名 [数组的长度,元素个数]数组类型
var images [3]int

数组的长度必须是常量,数组长度一旦定义不可以改变

  • 数组初始化
// 第一种
func main(){
	var a [2]int
	var names [3]string
	var num [2]int{1, 2}	// 初始化时指定初始值
}
// 第二种
var a [2]int
var names [...]int{1, 2}	// 使用...根据数组实际长度获取长度
// 指定索引
a := [...]int{1: 2, 3: 3} // [0 2 0 3]
  • 数组的遍历
//数组的遍历可以使用for循环实现
var a [3]int{1, 3, 4}
for i:=0; i < len(a); a++{
	fmt.Println(a[i])
}
// 使用range实现遍历
for index, value := range a{
	fmt.Println(index, value)
}
  • 多维数组
    多维数组就是在数组中还是数组
    数组是值类型,赋值和传参会复制整个数组,因此会copy一个副本,保留原数组
    数组支持 ==!= 操作符,因此内存总是被初始化过的
    [n]T表示指针数组,[n]T表示数组指针
// 多维数组的使用,实现二维数组
func main(){
	a := [3][2]int{{1,2}, {3, 4}, {5, 6}}
	// [[1 2] [3 4] [5 6]]
}
//获取多维数组中的值可以使用索引的方式获取
// 多维数组遍历需要使用多个for循环进行遍历,即遍历内部的数组
// 多维数组只有一层可以使用 [...] 让编译器推导数组的长度
a := [...][2]int{{1,2}, {3, 4}, {5, 6}}

切片

切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。类似于python的列表。

切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。

  • 切片定义
// var 切片名 []切片类型
var name []int
// 初始化
var a []int{1,3}
var c []bool{false, true}
  • 切片的长度和容量
    切片的长度使用 len 内置函数, 容量使用 cap 内置函数

  • 切片表达式
    切片表达式从字符串、数组、指向数组或切片的指针构造子字符串或切片。它有两种变体:一种指定low和high两个索引界限值的简单的形式,另一种是除了low和high索引界限值外还指定容量的完整的形式。

  • 切片的本质
    切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)

在这里插入图片描述

  • 使用make()函数构造切片
    使用make()函数可以动态创建数组
// make([]T, size, cap)
/*
T:切片的元素类型
size:切片中元素的数量
cap:切片的容量
*/
  • 获取切片中的值
    该方法类似于python列表的切片,遵循左闭右开原则
a := [5]int{1, 2, 3, 4, 5}
aa := a[1:3] // [2. 3]

  • 判断切片长度
// 判断数组为空
len(s) == 0
// 不适用len(s) == nil

TODO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值