go语言map操作

  • map是存储键值对的数据结构,使用哈希表实现,map是无序的。
  • map自动初始化值为nil,可以自动增长。
  • 和切片一样,map也是一种引用类型。
  • map是跨线程访问是不安全的,可以使用sync包中的Map来实现线程安全。

map的创建

方法一:直接定义

使用map关键字声明map,后面跟[key类型],value类型

var name map[keyType]valueType
var users = map[int]string{1: "小明", 2: "小张", 3: "小红"}
fmt.Println(users)
//将map赋值给另一个map,是引用
var users1 = users
users1[1] = "李华"
fmt.Println(users)
//访问未赋值的key
fmt.Println("value of 4:", users[4]) //返回初始值

需要注意的是,不能对一个nil的map进行赋值,将会报pinac

var values map[int]string
values[1] = "one"

//运行时报错
panic: assignment to entry in nil map

可以使用下面这种写法

var values = map[int]string{}
values[1] = "one"
方法二:使用make

和创建切片一样,使用make可以指定容量,减少扩容操作,提升性能。

//使用make创建map
var nums = make(map[string]int)
nums["one"] = 1 //不指定容量,赋值将会发生扩容操作
nums["two"] = 2
nums["three"] = 3
fmt.Println(nums) //map[one:1 three:3 two:2]

var nums1 = make(map[string]int, 10)
nums1["one"] = 1 //指定容量为10,容量内赋值不会扩容
nums1["two"] = 2
nums1["three"] = 3
fmt.Println(nums1) //map[one:1 three:3 two:2]

//使用切片作为value
var numMap = make(map[int][]string)
numMap[1] = []string{"1", "one", "一"}
numMap[2] = []string{"2", "two"}
fmt.Println(numMap) //map[1:[1 one 一] 2:[2 two]]

访问和赋值键值对

使用[key]操作符来引用key对应的变量,可以访问和赋值。

  • 访问不存在的key,将会返回默认值
  • 给不存在的key赋值,将会插入一个键值对
  • 给存在的key赋值,将会修改键值对
var values = map[int]string{}
values[1] = "one"
fmt.Println(values[1]) //输出 one

遍历键值对

使用for…range进行遍历

var numMap = make(map[int][]string)
numMap[1] = []string{"1", "one", "一"}
numMap[2] = []string{"2", "two"}
//for...range遍历
for k, v := range numMap {
	fmt.Println(k, v)
}

// 输出:
// 1 [1 one 一]
// 2 [2 two]

删除键值对

使用delete(map,key)来删除键值对

var numMap = make(map[int][]string)
numMap[1] = []string{"1", "one", "一"}
numMap[2] = []string{"2", "two"}

delete(numMap, 1)
fmt.Println(numMap) //输出:map[2:[2 two]]

go语言的map没有清空所有元素的函数,可以直接给map变量赋值一个空的map来达到清空的目的,go的垃圾回收会回收之前的map。

numMap = make(map[int][]string) //清空numMap
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值