Go基础学习: map

记录下Go的基础学习笔记,仅供自己参考,如果能帮到您,那是我的荣幸

map,Go里面称之为映射,一种像脚本语言使用数组的方式
常规用法示例:

m := map[string] int {
"aa":100,
"bb":100,
"cc":100,
}
fmt.Printf("%d--%d\n", len(m),m["aa"]);

输出:
3--100

要注意的是,如果取一个不存在的索引,会返回对应类型零值:

m := map[string] int {
"aa":100,
"bb":100,
"cc":100,
}
fmt.Printf("%d\n", m["xx"]);//不存在,该map对应的类型是int,所以返回int类型的零值:0

输出:
0

你可能就要问了,我们日常开发中,经常要检测有没有这个索引时,如何做啊?总不能判为0时,就表示不存在吧,因为有可能我的值就是0啊,放心,GO都想到了,这样即可:

m := map[string] int {
"aa":0,
"bb":100,
"cc":100,
}
n, ok := m["aa"]
if ok {
fmt.Printf("found aa:%d \n",n);
}else{
fmt.Printf("not found aa \n");
}
n, ok = m["xx"]
if ok {
fmt.Printf("found xx:%d \n",n);
}else{
fmt.Printf("not found xx \n");
}

输出:
found aa:0
not found xx

还有一种情况,我只想判断有没有存在,而不想取里面的值,可以吗?
可以的,这样即可:

m := map[string] int {
"aa":0,
"bb":100,
"cc":100,
}
_, ok := m["aa"]//使用_表示一个空白标识,可以理解为放弃这个返回值
if ok {
fmt.Printf("found aa\n");
}else{
fmt.Printf("not found aa \n");
}
_, ok = m["xx"]
if ok {
fmt.Printf("found xx\n");
}else{
fmt.Printf("not found xx \n");
}

输出:
found aa
not found xx

定义完map后,还可以加值吗?可以的:

m := map[string] int {
"aa":0,
"bb":100,
"cc":100,
}
m["xx"] = 111
fmt.Printf("%d\n", m["xx"]);

输出:
111

如何删除里map里面的某个索引及对应的值:

m := map[string] int {
"aa":0,
"bb":100,
"cc":100,
}
m["xx"] = 111
delete(m,"xx")
fmt.Printf("%d\n", m["xx"]);

输出:
0

如何遍历map:

m := map[string] int {
"bb":100,
"cc":100,
}
m["xx"] = 111
for k,v := range m{
fmt.Printf("%s=%d\n",k,v);
}

输出:
bb=100
cc=100
xx=111
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值