zoukankan      html  css  js  c++  java
  • Go 映射 (map)

    map 是 key - value 类型的数据结构,本身是无序的

    初始化

    map 声明之后必须要初始化才能使用
    初始化方法:

    make

    通过 make 可以分配内存空间,如果省略 size 的话,分配的空间会较少,当内存超出范围时会内存再分配
    示例:

    func main() {
    	foo := make(map[string]string, 10)
    	foo["key1"]= "value1"
    	fmt.Printf("%v", foo)
    }
    

    直接初始化

    声明时直接写入值

    func newMap() {
    	foo := map[string]string{
    		"key1": "value1",
    		"key2": "value2",
    	}
    	foo["key3"] = "value3"
    	fmt.Printf("%v", foo)
    }
    

    多层 map

    在使用多层 map 时,每一层 map 都要先初始化才能使用

    直接初始化

    直接初始化示例:

    func twoMap(){
    	foo := map[string]map[string]string{
    		"outer_key1": {
    			"inner_key1": "value1",
    			"inner_key2": "value2",
    		},
    		"outer_key2": {
    			"inner_key1": "value1",
    		},
    	}
    	fmt.Printf("%v", foo)
    }
    

    没有初始化的内层 map 如果要使用还需要通过 make 的方式进行初始化

    通过 make 初始化

    make 初始化示例:

    func twoMakeMap() {
    	foo := make(map[string]map[string]string, 10)
    	foo["outer_key1"] = make(map[string]string)
    	foo["outer_key1"]["inner_key1"] = "value1"
    	foo["outer_key1"]["inner_key2"] = "value2"
    	foo["outer_key2"] = make(map[string]string)
    	foo["outer_key2"]["inner_key1"] = "value1"
    	fmt.Printf("%v", foo)
    }
    

    操作

    插入 & 更新

    在已经分配内存的前提下,更新时如果不存在相应 key 就会自动插入

    func main() {
    	foo := map[string]string{
    		"key1": "value1",
    	}
    	foo["key1"] = "new_value1"
    	foo["key2"] = "value2"
    	fmt.Printf("%v", foo)
    }
    

    查找

    map[key] 会返回两个值:取到的值和是否取到值,如果没有取到值会返回相应值的空值

    func find() {
    	foo := map[string]string {
    		"key1": "value1",
    	}
    	key := "key1"
    	value, get := foo[key]
    	if get {
    		fmt.Printf("%v", value)
    	} else {
    		fmt.Printf("cannot find key: %v
    value is '%v', type is %T", key, value, value)
    	}
    }
    

    遍历

    func main() {
    	foo := map[string]string {
    		"key1": "value1",
    		"key2": "value2",
    	}
    	for k, v := range foo {
    		fmt.Printf("key: %v,
    value: %v
    
    ", k, v)
    	}
    }
    

    delete

    func delete(m map[Type]Type1, key Type)
    
  • 相关阅读:
    Xcode 统计代码行数
    AWS 根用户MFA丢失后如何处理
    istio 基础入门
    AWS 如何挑选合适EC2实例类型
    word去除页眉首页横线
    word 题注 图注 表注 交叉引用 自动编号
    (转)Python基础热图-参数超级详解
    VScode 运行代码显示:Code is already running!
    pyside2安装避坑
    vscode import numpy error:DLL load failed: The specific module could not be found
  • 原文地址:https://www.cnblogs.com/dbf-/p/12080021.html
Copyright © 2011-2022 走看看