go之map

一、概念

  • 简述
1、map 是一种无序的键值对的集合。(类似于python的字典dict)
2、map 的key 与 value 都是有类型的,且定义阶段时就已经统一
  • 定义方式
# 方式一
var mapName map[key_type]value_type
mapName = make(map[key_type]value_type)
// 如
//    var user map[string]string
//    user = make(map[string]string)


# 方式二 简短声明
mapName := make(map[key_type]value_type)
// 如
//    student := make(map[string]int)

# 方式三
mapName := map[key_type]value_type{}
// 如
// user := map[string]string{"jmz":"上海"}

二、声明、初始化、make

  • map 也是引用类型,需要make 创建内存
package main

import "fmt"

func main(){
        var user map[string]string

        user = make(map[string]string)
        user["jmz"] = "安工大"
        user["jly"] = "上核大"

        fmt.Println(user)


        data := make(map[string]int)
        data["info1"] = 32
        data["info2"] = 23

        fmt.Println(data)

        student := map[string]int{"jmz":23}
        fmt.Println(student)
}

三、map的增删改查

package main

import "fmt"

func main(){
        // 简短声明
        student := map[string]string{}


        // 增
        student["jmz"] = "上海"
        student["qqc"] = "北京"
        student["gka"] = "湖北"

        // 改
        student["jmz"] ="河南"

        // 查
        // 判断键是否存在
        v,ok := student["jms"] // ok == true 则jms 键存在对应的value
        if ok {
                fmt.Println(v)
        }

        // for-range
        for k,v := range student{
                fmt.Printf("key:%s,value:%s \n",k,v)
        }
        //你会发现map的输出 是无序的,因为本来map就无序,想要有序请使用 切片


        // 删
        delete(student,"jmz")  // 不存在的键删除 也不会报错
        // delete(student,"lll")  // 不会报错
        fmt.Println(student)

}

四、map 之函数

  • map 用法一
package main

import "fmt"

func main(){
        // 简短声明
        s := "中国是一个美丽的国家,China is a beautiful country"

        info := runeCount(s)
        for k,v := range info{
                fmt.Printf("%s : %d \n",string(k),v)
        }
}

// 字符串,解析每个字符的个数
func runeCount(s string)map[rune]int{
        info := map[rune]int{}


        for _,v := range []rune(s){
                info[v]++
        }
        return info
}
  • map 用法二 键值对调

package main
import (
        "fmt"
)

var (
        barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,
                "delta": 87, "echo": 56, "foxtrot": 12,
                "golf": 34, "hotel": 16, "indio": 87,
                "juliet": 65, "kili": 43, "lima": 98}
)

func main() {
        invMap := make(map[int]string, len(barVal))
        for k, v := range barVal {
                invMap[v] = k
        }
        fmt.Println("inverted:")
        for k, v := range invMap {
                fmt.Printf("Key: %v, Value: %v / ", k, v)
        }
}

如果喜欢看小说,请到183小说网