zoukankan      html  css  js  c++  java
  • go语言的map

    go语言map

    go语言的map是一个key-value的数据结构,它是go提供的映射关系的容器,内部使用hash实现。map是引用类型,必须初始化才能使用。

    map的定义

    package main
    
    import "fmt"
    
    func main() {
    	//声明一个空的map,没有申请到内存
    	//var dict map[string] string
    	// 空的map不可以直接使用,这个是错误的
    	//dict["user"] = "ivy"
    	//fmt.Println(dict) // panic: assignment to entry in nil map
    	var dict = map[string]string{"user": "ivy",}
    	// 给map设置key-value
    	dict["age"] = "18"
    	fmt.Println(dict) // map[age:18 user:ivy]
    
    	dict1 := make(map[string]string, 10)
    	dict1["user"] = "ivy"
    	fmt.Println(dict1) // map[user:ivy]
    }
    
    
    • 空的map(nil)没有申请内存空间的不可以直接使用
    • 可以使用make来声明一个申请内存的空map,此时的map可以直接被使用
    • map相当于python的字典,没有顺序,但它的键和值都必须为声明时键值的类型
    • map的取值直接使用map[key]即可
    • map的赋值直接使用map[key] = value

    map取值

    package main
    
    import "fmt"
    
    func main() {
    	dict := make(map[string]string, 10)
    	value, ok := dict["data"]
    	if !ok {
    		fmt.Println("没有这个值!") // 没有这个值!
    	} else {
    		fmt.Println(value)
    	}
    }
    

    map取值的时候会返回value和一个布尔值,布尔值代表有没有取到值,value为取到的值

    map的遍历

    package main
    
    import "fmt"
    
    func main() {
    	dict := map[string]string{
    		"user": "ivy",
    		"age":  "18",
    		"sex":  "male",
    	}
    
    	for k, v := range dict {
    		fmt.Println(k, v)
    		//sex male
    		//user ivy
    		//age 18
    	}
    }
    

    map的删除

    map的删除使用的是内置的delete函数
    delete不同于slice的append,delete直接作用的是原来的对象,而append返回的是新的对象

    package main
    
    import "fmt"
    
    func main() {
    	dict := map[string]string{
    		"user": "ivy",
    		"age":  "18",
    		"sex":  "male",
    	}
    
    	delete(dict, "user")
    	fmt.Println(dict) // map[age:18 sex:male]
    	delete(dict, "hobby")
    	fmt.Println(dict) // map[age:18 sex:male]
    }
    
    

    当时用delete去删除一个不存在的key时,此次delete不会报错
    直接使用goland查看delete的源码的dockey看到

    // The delete built-in function deletes the element with the specified key
    // (m[key]) from the map. If m is nil or there is no such element, delete
    // is a no-op.
    

    当key不存在时,delete不做任何操作

  • 相关阅读:
    关于使用wcf架构分布式系统的一点想法
    vs2012 远程调试服务器上iis下的程序
    F#定义方法参数
    产生不重复的随机数
    巧在C#中设置多维动态数组,可以动态增加及删除
    C#时间相减
    css控制图片大小的方法
    常用网络命令
    DEDE SQL 常用语句
    未审核文档发布时间的自动更改方法for DEDEcms v5.3(修正版)
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/12654668.html
Copyright © 2011-2022 走看看