• Go-map


    map(字典)

    Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。

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

    语法

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

    map声明

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

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

    初始化

    package main
    import "fmt"
    
    func main() {
    	scoreMap := make(map[string]int, 8)
    	scoreMap["张三"] = 90
    	scoreMap["小明"] = 100
    	fmt.Println(scoreMap)
    	fmt.Println(scoreMap["小明"])
    	fmt.Printf("type of a:%T
    ", scoreMap)
        
        // 声明时填充元素
        userInfo := map[string]string{
    		"username": "标",
    		"password": "123456",
    	}
    	fmt.Println(userInfo) //
    }
    

    map创建

    使用字面量创建
    ma := map[string]int{"a":1, "b":2}
    
    使用内置函数make创建
    make(map[K]T) // map容量使用默认值
    make(map[K]T, len) // map容量使用给定值 len
    

    map操作

    判断某个键是否存在
    // 书写方法
    value, ok := map[key]
    
    示例
    package main
    import "fmt"
    
    func main() {
        scoreMap := make(map[string]int)
        scoreMap["张三"] = 100
        scoreMap["李四"] = 90
        
        // 如果key存在ok为true,v为对应的值;不存在ok为false,v为值类型的零值
        value, ok := scoreMap["张三"]
        if ok {
            fmt.Println(value)
        } else {
            fmt.Println("无")
        }
        
    }
    
    遍历

    注意: 遍历map时的元素顺序与添加键值对的顺序无关。

    for ... range 遍历
    package main
    import "fmt"
    
    func main() {
    	scoreMap := make(map[string]int)
        scoreMap["张三"] = 100
        scoreMap["李四"] = 90
        // 遍历map
        for k,v := range scoreMap {
            fmt.Println(k,v)
        }
    }
    
    按照指定顺序遍历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            //
    	}
    
    	// 取出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])
    	}
    }
    
    
    删除键值对

    使用delete(mapName,key)内建函数从map中删除一组键值对

    package main
    import "fmt"
    
    func main() {
    	scoreMap := make(map[string]int)
        scoreMap["张三"] = 100
        scoreMap["李四"] = 90
        // 删除
        delete(scoreMap, "李四")
        
        for k,v := range scoreMap {
            fmt.Println(k,v)
        }
    }
    
    使用内置函数len(mapName) 返回map中键值对的数量
    package main
    import "fmt"
    
    func main() {
    	scoreMap := make(map[string]int)
        scoreMap["张三"] = 100
        scoreMap["李四"] = 90
        // 删除
        delete(scoreMap, "李四")
        
        fmt.Println(len(scoreMap))
    }
    
  • 相关阅读:
    18.11.5 考试总结
    18.11.2 考试总结
    18.11.1 考试总结
    洛谷 P1084 疫情控制 noip2013D2T3
    18.10.31 考试总结
    洛谷P1312 Mayan游戏 noip2011D1T3
    18.10.30 考试总结
    【考前复习_各类模板之补充】
    NOIP2016之反面教材提供
    【最后的抒情】【离NOIP还有9个小时】
  • 原文地址:https://www.cnblogs.com/binliubiao/p/14488151.html
Copyright © 2020-2023  润新知