go语言学习——4

文章目录

Map

  • map是一种特殊的数据结构:一种元素对pair的无序集合,pair的一个元素是key,对应一个value,这种结构也称为“关联数组或字典”
  • 引用类型
  • map声明
var map1 map[keytype] valuetype
var map1 map[string] int
  • map可以动态增长
  • key可以是任意用==或!=操作符比较的类型,string、int、float,切片和结构体不能作为key,只包含内建类型的struct可以,指针和接口类型可以
  • value可以是任意类型的
  • 也可以用函数作为自己的值
map1[key1]=val1
v:=map1[key]
len(map1)

var mapLit map[string] int
var mapAssigned map[string] int

mapLit=map[string] int{"one":1,"two":2}
mapCreated:=make(map[string] float32)
// mapCreated:=map[string] float32
//map是引用类型的,内存用make方法来分配
mapAssigned=mapLit
//mapAssigned是mapLit的引用,修改mapAssigned的修改也会影响到mapLit的值
mf:=map[int] func()int{
	1:func()int{return 10},
	2:func()int{return 20},
	5:func()int{return 50},
}
  • 如果一个key要对应多个值?
    可以将value定义为[]int类型或者其他类型的切片
map1:=make(map[int] []int)
map2:=make(map[int] *[]int)
  • 测试键值对是否存在以及删除元素
  • map1[key1]的方法获取key1对应的值val1,如果不存在,val1是空值,无法区分key1不存在还是它对应的value就是空值,可以用val1,isPresent=map1[key1],isPresent返回一个bool值,如果key1存在map1,val1对应值,isPresent为true,key1不存在,val1是空值,isPresent会返回false

//仅判断某个key是否存在
_,ok:=map1[key1]
//或者
if _,ok:=map1[key1];ok{
	//...
}
  • 删除key,可以使用delete(map1,key1),key1不存在也不会报错

  • for-range

for key,value:=range map1{
	...
}
//只获取value
for _,value:=range map1{
	...
}
//只获取key值
for key:=range map1{
	...
}
  • map类型切片

必须使用两次make()函数,第一次分配切片,第二次分配切片中的每个map元素

//version A:
items:=make([]map[int] int ,5)
for i:=range items{
	items[i]=make(map[int]int,1)
	items[i][1]=2
}
//version B:not good
items2:=make([]map[int],int,5)
for _,item:=range items2{
	item=make(map[int]int,1)
	item[1]=2
}
//Version A: Value of items: [map[1:2] map[1:2] map[1:2] map[1:2] map[1:2]]
//Version B: Value of items: [map[] map[] map[] map[] map[]]
  • map的排序

map默认无序
想要对map排序,需要将key或value拷贝到一个切片,再对切片排序

var (
    barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,
                            "delta": 87, "echo": 56, "foxtrot": 12,
                            "golf": 34, "hotel": 16, "indio": 87,
                            "juliet": 65, "kili": 43, "lima": 98}
)

keys := make([]string, len(barVal))
i := 0
for k, _ := range barVal {
    keys[i] = k
    i++
}
sort.Strings(keys)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值