Adminxe's Blog | 低调求发展 - 潜心习安全 ,技术永无止境 | 谢谢您对本站的支持,有什么问题或者建议请及时联系:点击这里给我发消息

Go语言学习–Map

安全开发 MoCo, MoCo 99℃ 0评论

map定义

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

map[KeyType]ValueType
  • KeyType:表示键的类型。
  • ValueType:表示键对应的值的类型。

基本使用

package main

import "fmt"

// map
func main() {
    var m1 map[string]int
    fmt.Println(m1 == nil)        // 还没有初始化(没有在内存中开辟空间)
    m1 = make(map[string]int, 10) //要估算好该map容量,避免在程序运行期间再动态扩容
    m1["MoCo"] = 18
    m1["Adminxe"] = 22

    fmt.Println(m1)
    fmt.Println(m1["MoCo"])
}

判断某个键是否存在

package main

import "fmt"

// map
func main() {
    var m1 map[string]int
    fmt.Println(m1 == nil)        // 还没有初始化(没有在内存中开辟空间)
    m1 = make(map[string]int, 10) //要估算好该map容量,避免在程序运行期间再动态扩容
    m1["MoCo"] = 18
    m1["Adminxe"] = 22

    fmt.Println(m1)
    fmt.Println(m1["MoCo"])

    //判断某个键是否存在
    //约定成俗用OK接收返回的布尔值
    fmt.Println(m1["Azjj"]) //如果不存在这个key拿到对应值类型的零值
    value, ok := m1["Azjj"]
    if !ok {
        fmt.Println("查无此key")
    } else {
        fmt.Println(value)
    }
}

map的遍历

package main

import "fmt"

// map
func main() {
    var m1 map[string]int
    fmt.Println(m1 == nil)        // 还没有初始化(没有在内存中开辟空间)
    m1 = make(map[string]int, 10) //要估算好该map容量,避免在程序运行期间再动态扩容
    m1["MoCo"] = 18
    m1["Adminxe"] = 22

    fmt.Println(m1)
    fmt.Println(m1["MoCo"])

   
    //map的遍历
    for k, v := range m1 {
        fmt.Println(k, v)
    }
    //只遍历key
    for k := range m1 {
        fmt.Println(k)
    }
    //只遍历value
    for _, v := range m1 {
        fmt.Println(v)
    }
    
}

delete()函数删除键值对

delete(map, key)

  • map:表示要删除键值对的map
  • key:表示要删除的键值对的键
package main

import "fmt"

// map
func main() {
    var m1 map[string]int
    fmt.Println(m1 == nil)        // 还没有初始化(没有在内存中开辟空间)
    m1 = make(map[string]int, 10) //要估算好该map容量,避免在程序运行期间再动态扩容
    m1["MoCo"] = 18
    m1["Adminxe"] = 22
 
    //删除
    delete(m1, "Adminxe")
    fmt.Println(m1)
delete(m1, "Azjj") // 删除不存在的key
//内建函数delete按照指定的键将元素从映射中删除。若m为nil或无此元素,delete不进行操作。
}

指定顺序遍历map

将一堆无序的值有序的遍历出来

package main

import (
    "fmt"
    "math/rand"
    "sort"
    "time"
)

func main() {
    rand.Seed(time.Now().UnixNano()) //初始化随机数种子

    var scoreMap = make(map[string]int, 200)

    for i := 0; i < 100; i++ {
        key := fmt.Sprintf("stu%02d", i) //生成stu开头的字符串
        value := rand.Intn(100)          //生成0~99的随机整数
        scoreMap[key] = value
    }
    //fmt.Println(scoreMap)
    //取出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"

//map和slice组合
func main() {
    //元素类型为map的切片
    var s1 = make([]map[int]string, 10, 10)
    s1[0] = make(map[int]string, 1)
    s1[0][10] = "MoCo"
    fmt.Println(s1)

    
}

值为切片类型的map

package main

import "fmt"

//map和slice组合
func main() {
    
    //值为切片类型的map

    var m1 = make(map[string][]int, 10)
    m1["Adminxe"] = []int{10, 20, 30}
    fmt.Println(m1)
}

参考链接

https://www.liwenzhou.com/posts/Go/08_map/

转载请注明:Adminxe's Blog » Go语言学习–Map

喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址