Go 语言基础学习: map
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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。