Go语言入门系列(四)之map的使用

本系列前面的文章:数组

1. 声明

map是一种映射,能够将键(key)映射到值(value),格式为:map[keyType]valueType函数

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

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

若是不想直接初始化,能够先声明再使用,注意这样须要使用make函数初始化后才能使用:get

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

为何这样声明须要使用make函数?数学

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

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]

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

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

2. 增删改查

(增)增长键值对:import

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^)/
相关文章
相关标签/搜索