乐趣区

关于编程语言:Go语言入门系列四之map的使用

本系列后面的文章:

  • Go 语言入门系列 (一) 之 Go 的装置和应用
  • Go 语言入门系列 (二) 之根底语法总结
  • Go 语言入门系列 (三) 之数组和切片

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^)/

退出移动版