• go 语言的映射(map)


    基本语法 var map变量名map[keytype]valuetype

    PS: key、value的类型: bool、数字、string、指针、channel、还可以是只包含前面几个类型的接口、结构体、数组
    PS: key通常为int 、string类型,value通常为数字(整数、浮点数) 、string、map、结构体
    PS: slice、map、function不可以

    var a map[string]string
    	a = make(map[string]string)
    	a["id"] = "123"
    	a["name"] = "王二"
    	//map[id:123 name:王二]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    快速创建

       a :=make(map[string]string)
       a["id"] = "123"
       a["name"] = "王二"
    //map[id:123 name:王二]
    ps:map特点在使用前要makemap的key和value是无序的,当key重复时,仅把最后一个作为key的value作为value
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    初始化,赋值

    a :=map[int]string{1:"123",3:456}
    //map[1:123 3:456]
    
    • 1
    • 2

    增加

    格式:
    name [key]=“value”

      a :=make(map[string]string)
       a["id"] = "123"
       a["name"] = "王二"
       //map[id:123 name:王二]
       a["sex"]="男"
         //map[id:123 name:王二 sex:男]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    删除

    格式:
    delete(mapname,key)

     a :=make(map[string]string)
       a["id"] = "123"
       a["name"] = "王二"
       //map[id:123 name:王二]
       a["sex"]="男"
         //map[id:123 name:王二 sex:男]
       delet(a,"sex"//map[id:123 name:王二]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ps:如果没有找不到key 不会报错

    清空map

    go语言没有专门的函数去清空map,可以通过迭代的方式删除
    *** 只能通过for -range***

    	for i := range a {
    		delete(a, i)
    	}
    
    • 1
    • 2
    • 3

    还有一种方式就是新建一个map替代旧的一个,旧的会自动被垃圾回收机制回收

    查询

    格式:
    value,bool =map[key]
    value 根据key 返回value
    bool:查询到则true否则false

    
     a :=make(map[string]string)
       a["id"] = "123"
       a["name"] = "王二"
       a["sex"]="男"
       value, bool := a["sex"]
       // 男 true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    当 map的value为map时

    a :=makemap[string]map[string]string)
    a["班级1"]=make(map[string]string)
    a["班级1"]["2011010"]="王五"
    a["班级1"]["2011011"]="李四"
    a["班级1"]["2011012"]="张三"
    a["班级2"]=make(map[string]string)
    a["班级2"]["2012010"]="王五1"
    a["班级2"]["2012011"]="李四1"
    a["班级2"]["2012012"]="张三1"
    // 遍历
    for i,v:=range a{
    	fmt.Println(i)
    	for i1,v1:=range v{
    			fmt.Print("key=", i1, "\t", "value=", v1)
    	}
    		fmt.Println()
    }
    	fmt.Println(len(a), len(a["班级1"]))
    //班级1
    //key=2011012	value=李四key=2011010	value=王明key=2011011	value=王五
    //班级2
    //key=2012010	value=王明1key=2012011	value=王五1key=2012012	value=李四1
    //  2    3
    	
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    当map的value为结构体时

    type Books struct{
    	Id int
    	Name string	
    }
    func main(){
    	a:=make(map[string]Books)
    	a[1]=Books{Id:123,Name:"wanger"}
    	//map[1:{123 wanger }]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    或者

     
    type Person struct{
    	name string
    	sex string
    	age int
    }
     
    func main(){
    	m := map[uint]Person{
    		0 : Person{"张三", "男", 18},
    		1 : Person{"李四", "女", 17},
    	}
    	fmt.Println(m)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    Floyd 算法
    【MySQL系列】MySQL数据库索引详解
    17 STL - 函数对象
    【企业动态】欢迎法国客户来访东胜物联,深入探讨智能化合作
    SystemVerilog验证导论
    两岸猿声啼不住,轻舟已过万重山——我的四分之一人生
    五分钟看完,彻底理解协变逆变
    阿里云大数据实战记录10:Hive 兼容模式的坑
    “互联网+”时代,3D全景营销打造千人千面营销点
    利用pyhton整理生活中的小事情
  • 原文地址:https://blog.csdn.net/weixin_46291263/article/details/127673106