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啊,放心,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"]);  

输出: 


如何遍历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 

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