zoukankan      html  css  js  c++  java
  • map

    map是一种无序的基于k-v的数据结构,Go语言中的map是引用类型,必须初始化才能使用。

    语法:map[KeyType]ValueType

    map类型的变量默认初始值为nil,需要使用make()函数初始化来分配内存,

    make(map[KeyType]ValueType,[cap])

    cap表示map的容量,该参数不是必须的,但是应该在初始化map的时候就指定一个合适的容量。

    map的基本使用

    package main
    
    import "fmt"
    
    func main() {
    
        // 声明  初始化  赋值
        map1 := make(map[string]int,8)
        map1["张三"] = 1
        map1["李四"] = 2
        fmt.Println(map1)
    
        // 声明的时候,填充元素
        map2 := map[string]string{
            "姓名":"张三",
            "年龄":"23",
        }
        fmt.Println(map2)
    
    }
    

      

    判断某个键,是否存在

    判断map中键是否存在的特殊写法:value,ok := map[key]

    package main
    
    import "fmt"
    
    func main() {
    
        map1 := make(map[string]int,8)
        map1["张三"] = 30
        map1["李四"] = 40
    
        v,ok := map1["张三"]
        if ok {
            fmt.Println(v)          // v:key对应的value值
        } else {
            fmt.Println("不存在")
        }
    
    }
    

      

    遍历map

    package main
    
    import "fmt"
    
    func main() {
    
        map1 := make(map[string]int,8)
        map1["张三"] = 100
        map1["李四"] = 200
    
        for k,v := range map1 {         // 遍历k,v
            fmt.Println(k,v)
        }
    
        for k := range map1 {           // 只遍历key
            fmt.Println(k)
        }
    
    }
    

      

    删除map中键值对

    package main
    
    import "fmt"
    
    func main() {
    
        map1 := make(map[string]int,8)
        map1["张三"] = 100
        map1["李四"] = 200
    
        delete(map1,"张三")
        fmt.Println(map1)
    }
    

      

    按照大小顺序遍历map

    package main
    
    import (
        "fmt"
        "time"
        "sort"
        "math/rand"
    )
    
    func main() {
        rand.Seed(time.Now().UnixNano()) //初始化随机数种子
    
        var scoreMap = make(map[string]int, 200)        // 创建cap为200的map
    
        for i := 0; i < 100; i++ {
            key := fmt.Sprintf("stu%02d", i) //生成stu开头的字符串
            value := rand.Intn(100)          //生成0~99的随机整数
            scoreMap[key] = value                       // 向map中追加数据
        }
    
        //取出map中的所有key存入切片keys
        var keys = make([]string, 0, 200)
        for key := range scoreMap {
            keys = append(keys, key)
        }
    
        //对切片进行排序
        sort.Strings(keys)
        
        //按照排序后的key遍历map
        for _, key := range keys {
            fmt.Println(key, scoreMap[key])
        }
    }
    

      

    元素为map类型的切片

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var mapSlice = make([]map[string]string, 3)
        for index, value := range mapSlice {
            fmt.Printf("index:%d value:%v
    ", index, value)
        }
        fmt.Println("after init")
        // 对切片中的map元素进行初始化
        mapSlice[0] = make(map[string]string, 10)
        mapSlice[0]["name"] = "王五"
        mapSlice[0]["password"] = "123456"
        mapSlice[0]["address"] = "红旗大街"
        for index, value := range mapSlice {
            fmt.Printf("index:%d value:%v
    ", index, value)
        }
    }
    

      

    值为切片类型的map

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var sliceMap = make(map[string][]string, 3)
        fmt.Println(sliceMap)
        fmt.Println("after init")
        key := "中国"
        value, ok := sliceMap[key]
        if !ok {
            value = make([]string, 0, 2)
        }
        value = append(value, "北京", "上海")
        sliceMap[key] = value
        fmt.Println(sliceMap)
    }
    

      

  • 相关阅读:
    CSS预编译:less入门
    JavaScript学习(五):函数表达式
    关于JavaScript new 的一些疑问
    JavaScript学习(四):面对对象的程序设计
    JavaScript学习(三):引用类型
    JavaScript学习(二):变量、作用域和内存问题
    JavaScript学习(一):基本概念
    匿名函数的this指向为什么是window?
    阿里云ECS在CentOS 6.8中使用Nginx提示:nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)的解决方法
    Centos释放缓存
  • 原文地址:https://www.cnblogs.com/yizhixiaowenzi/p/14686154.html
Copyright © 2011-2022 走看看