Golang学习笔记-1.14 Maps

本文系第十四篇Golang语言学习教程

What is maps?

map是在 go 中将键(key) 与值(value)关联的内置类型. 通过相应的键可以获取到值.

创建 map

通过向 make 函数传入键和值的类型, 可以创建 map. make(map[type of key]type of value)是创建 map 的语法.

money := make(map[string]int)

以上创建了一个名为money的map, 其中键的类型是string, 值的类型是int.

map 初始值为空, 需要给 map 添加元素

给 map 添加元素

给 map 添加元素的语法和数组相同.
例1:

package main

import "fmt"

func main()  {
    money := make(map[string]int) //创建 一个名为 money 的 map
    money["xunk"] = 20000
    money["ergou"] = 30000
    money["jobs"] = 40000   //给 money 添加元素
    fmt.Println("money's map is ", money)
}

上面的程序输出为 : money's map is map[xunk:20000 ergou:30000 jobs:40000]
也可以在声明的时候初始化 map.
例2:

package main

import "fmt"

func main()  {
    money := map[string]int {
        "xunk" : 2000,
        "ergou" : 3000,
        "jobs" : 4000,
    }
    money["bill"] = 6000
    fmt.Println("money's map is ", money)
}

以上程序在声明 map 时添加了三个元素, 之后又添加了 bill , 程序输出为:
money's map is map[xunk:2000 ergou:3000 jobs:4000 bill:6000]

键不一定只能是 string 类型。所有可比较的类型,如 boolean,interger,float,complex,string 等,都可以作为键。

获取 map 中的元素

获取 map 的元素语法为:map[key]

package main

import "fmt"

//make(map(type of key)type of value)

func main()  {
    money := map[string]int {  //声明时添加值
        "xunk" : 2000,
        "ergou" : 3000,
        "jobs" : 4000,
    }
    money["bill"] = 6000

    name := "jobs"
    fmt.Println("the money of ", name, "is ", money[name])
}

以上程序获取了 jobs 的钱数, 并打印出来. 程序输出为: the money of jobs is 4000

如果获取一个不存在的元素, map 会返回一个该类型就元素的零值. 如上程序中, 我们获取一个不存在的键, 会返回 int类型的值 0 .

    money := map[string]int {  //声明时添加值
        "xunk" : 2000,
        "ergou" : 3000,
        "jobs" : 4000,
    }
    money["bill"] = 6000

    fmt.Println("the money of danny is ", money["danny"])
}

程序输出为: the money of danny is 0

查看 map 中是否存在这个 key , 语法为: value, ok := map[key]

    money := map[string]int {  //声明时添加值
        "xunk" : 2000,
        "ergou" : 3000,
        "jobs" : 4000,
    }

    money["bill"] = 6000
    newname := "jenny"
    value, ok := money[newname]
    if ok == true {
        fmt.Println("jenny's money is ", value)
    } else {
        fmt.Println(newname,"not found")
    }
}

以上程序中, 如果 ok = true , 则表示这个键存在, 对应的值是value, 反之则不存在.
程序输出为:
jenny not found

遍历 map 中的元素, 需要用到for range循环:

    for key, value  := range money{
        fmt.Printf("map[%s] = %d\n", key, value)
    }

以上程序输出为:

map[xunk] = 2000
map[ergou] = 3000
map[jobs] = 4000
map[bill] = 6000

删除 map 中的元素

删除 map 中的元素语法是: delete(map,key) , 这个函数没有返回值.

book := map[string]int {
        "bainiangudu" : 3,
        "fooled" : 2,
        "blockchain" : 1,
    }
    delete(book, "bainiangudu")
    fmt.Println(book)
}

以上程序中删除了键 bainiangudu, 程序输出为:
map[fooled:2 blockchain:1]

map 是引用类型

和 slice 一样, map 也是引用类型, 当 map 被赋值一个新变量时, 它们指向同一个内部数据结构, 当改变其中一个变量时, 就会影响到另一个.

    newmoney := money
    newmoney["xunk"] = 5000
    fmt.Println(money["xunk"])

以上程序中, 将 money赋值给 newmoney , 然后改变 newmoney中的 xunk 值, 则 money 中的 xunk值也发生改变. 程序输出为:
5000

以上为学习Golang maps

    原文作者:xunk1900
    原文地址: https://www.jianshu.com/p/91f2b24d7279
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞