数组 切片 map

Array(数组)

数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。
数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。 [5]int和[10]int是不同的类型。

数组的定义
var 数组变量名 [元素数量]T
eg: var a [3]int

数组初始化
方法一:
初始化数组时可以使用初始化列表来设置数组元素的值。
var testArray [3]int
var numArray = [3]int{1, 2} 
var numArray = [...]int{1, 2}

方法二:
a := [...]int{1: 1, 3: 5}

数组的遍历
1. for循环
2. for range 循环


二维数组
a := [3][2]string{
    {"北京", "上海"},
    {"广州", "深圳"},
    {"成都", "重庆"},
}
多维数组只有第一层可以使用...来让编译器推导数组长度。


二维数组的遍历
a := [3][2]string{
   {"北京", "上海"},
   {"广州", "深圳"},
    {"成都", "重庆"},
}
for _, v1 := range a {
    for _, v2 := range v1 {
        fmt.Printf("%s\t", v2)
}

数组的局限性
因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性,例如一个函数只能接受指定长度的数组类型。


切片

切片是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。
切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。

//因为切片是一个引用类型,所以切片在使用前需要先定义。

切片的定义
①var name []T
②name := a1[:]
③make([ ]int,size,cap) 


切片的长度和容量
切片拥有自己的长度和容量,我们可以通过使用内置的len()函数求长度,使用内置的cap()函数求切片的容量。

要检查切片是否为空,请始终使用len(s) == 0.
切片之间是不能比较的,我们不能使用==操作符来判断两个切片是否含有全部相等元素。 
切片唯一合法的比较操作是和nil比较。

append
Go语言的内建函数append()可以为切片动态添加元素。 
可以一次添加一个元素,可以添加多个元素,也可以添加另一个切片中的元素(后面加…)。
eg: s = append(s, s2...)
s1 = append(s1,ss...) ...表示把ss拆开

每个切片会指向一个底层数组,这个数组的容量够用就添加新增元素。当追加了元素超过底层数组容量时,go会把底层数组更换。
所以调用append函数必须用一个切片变量接受返回值。

通过var声明的零值切片可以在append()函数直接使用,无需初始化。
eg:
var s []int
s = append(s, 1, 2, 3)

copy( )函数
由于切片是引用类型,所以切片a和切片b其实都指向了同一块内存地址。修改b的同时a的值也会发生变化。
Go语言内建的copy()函数可以迅速地将一个切片的数据复制到另外一个切片空间中。

copy(destSlice, srcSlice []T)
srcSlice: 数据来源切片
destSlice: 目标切片


从切片中删除元素
a = append(a[:2],a[3:]...)


map

map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。

map的定义
make(map[KeyType]ValueType, [cap]) //cap不是必要的参数

使用delete()内建函数从map中删除一组键值对,delete()函数的格式如下:
delete(map, key)

按照指定顺序遍历map
取出map中的所有key存入切片keys:
var keys = make([]string, 0, 200)
for key := range scoreMap {
    keys = append(keys, key)
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值