zoukankan      html  css  js  c++  java
  • Go语言入门系列(四)之map的使用

    本系列前面的文章:

    1. 声明

    map是一种映射,可以将键(key)映射到值(value),格式为:map[keyType]valueType

    声明一个map并初始化它,使用key:value进行初始化:

    var scores = map[string]int {"数学":100, "语文":90, "Go":100}
    

    如果不想直接初始化,可以先声明再使用,注意这样需要使用make函数初始化后才能使用:

    var scores map[string]int
    scores = make(map[string]int)
    

    为什么这样声明需要使用make函数?

    map的零值是nil map,没有键,也不能添加键。

    var m map[string]int //声明一个m map,它现在默认是nil
    fmt.Println(m) //map[]
    m["A"] = 1 //报错:assignment to entry in nil map
    

    所以为了不让该map不是nil,需要使用make初始化:

    var m map[string]int //nil
    m = make(map[string]int) //初始化
    m["A"] = 1 //添加元素
    fmt.Println(m) //map[A:1]
    

    当然,方便的短变量声明方式也能用:

    m := map[string]int {"A":1, "B":2}
    或者
    m := make(map[string]int)
    m["A"] = 1
    m["B"] = 2
    

    2. 增删改查

    (增)增加键值对:

    scores["数学"] = 100 //向scores这个map添加了键为“数学”,值为100的数据
    scores["语文"] = 90
    

    (删)删除键值对:

    delete(scores, "语文")
    

    (改)修改键值对和增加键值对的语法相同(当key不存在时为增加,当key存在时为修改):

    scores["语文"] = 10
    

    (查)使用key可以查找到对应的value,会返回两个值,第一个是key对应的value,第二个是布尔值(如果key存在,是true;否则是false)。如果查找的key不存在,则会返回value类型的“零值”:

    score, exist := scores["数学"] //使用两个返回值
    fmt.Println(score, exist) //100 true
    
    score1 := scores["语文"] //使用一个返回值
    fmt.Println(score1) //90
    
    score2, exist2 := scores["Java"] //查找不存在的key
    fmt.Println(score2, exist2) //0 false
    

    3. 其他用法

    slice一样,map也是引用类型,则意味着,如果有几个map同时指向一个底层map,其中一个map改变某个键值对,那么其他的也会做出同样的改变(因为底层map变了)。

    package main
    
    import "fmt"
    
    func main() {
    	map0 := make(map[string]string) //底层map0
    	map0["name"] = "XingXiaoguan" //增加一个键值对
    
    	//map1 map2 引用map0
    	map1 := map0
    	map2 := map0
    
    	fmt.Println(map0["name"], map1["name"], map2["name"]) //都是XingXiaoguan
    
    	map1["name"] = "XingRenGuanXue" //改变map1的name对应的值
    	fmt.Println(map0["name"], map1["name"], map2["name"]) //全部变为XingRenGuanXue
    }
    

    使用len函数可以获取mapkey的数量:

    keyNum := len(scores) //获取scores这个map中key的数量
    

    map是无序的,所以其返回的元素顺序可能每次都不同。

    可以使用range关键字遍历map,这里range返回的第一个值是key,第二个值是value

    //遍历scores map
    for key, value := range scores {
        fmt.Println(key, value)
    }
    
    输出:
    数学 100
    语文 90
    

    如有错误,还请指正。

    4. 关于我

    点击这里认识我 。 (^o^)/

  • 相关阅读:
    minicom使用
    Oracle(+)号用法
    金蝶AAS对HTTP方法有限制
    Maven设置utf8编码格式
    ELK实时日志分析平台环境部署--完整记录(ElasticSearch+Logstash+Kibana )
    Redis中的持久化操作
    iOS 动画Animation
    iOS打造属于自己的用户行为统计系统
    WEB前端,混合排版,有的宽有的窄,滚动会出现空白处,怎么办。
    hadoop云盘client的设计与实现(一)
  • 原文地址:https://www.cnblogs.com/xingrenguanxue/p/13443372.html
Copyright © 2011-2022 走看看