zoukankan      html  css  js  c++  java
  • Golang map

    map

    • 类似其他语言中的哈希表或者字典,以key-value形式存储数据
    • key必须是支持==或!=比较运算的类型,不可以是函数、map或slice
    • map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
    • map使用make()创建,支持:=这种简写方式
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	var m map[int]string //使用var关键字,[key类型]value类型
    	m = map[int]string{}   //初始化这个map
    	//m = make(map[int]string)
    	m2 := make(map[int]string)  //这样都是实现map的简单初始化的方法
    	fmt.Println(m)
    	fmt.Println(m2)
    }
    
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	m2 := make(map[int]string)
    	m2[1] = "ok"
    	fmt.Println(m2)
    	delete(m2, 1) //删除一个键值对
    	a := m2[1]    //取出key为1的值
    	fmt.Println(a)
    }
    
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	var m map[int]map[int]string
    	m = make(map[int]map[int]string) //对m进行初始化
    	m[1] = make(map[int]string)      //此时对key为1的map进行初始化
    	m[1][1] = "ok"                   //对key为1的map中的key为1的string进行赋值为ok
    	a := m[1][1]                     //取值
    	fmt.Println(a)
    }
    
    
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	var m map[int]map[int]string
    	m = make(map[int]map[int]string) //对m进行初始化
    	a, ok := m[2][1]                 //此时没有对key为2的map进行初始化,所以ok的返回值是false,a的值为空
    	fmt.Println(a, ok)
    	if !ok {
    		m[2] = make(map[int]string)
    
    	}
    	m[2][1] = "hello"
    	a, ok = m[2][1]
    	fmt.Println(a, ok)
    }
    
    • make([keyType]value Type, cap),cap表示容量,可省略
    • 超出容量时会自动扩容,但尽量提供一个合理的初始值
    • 使用len()获取元素个数
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	// for i,v :range slice{}  i对应的是slice的索引,v对应的是slice索引相对应的值这里对v的所有操作都不会影响这个slice
    	//这个时候需要用slice[i]来改变v的值
    	//for k,v :range map{} 此时k对应的是map中的key,v对应的是map中的value值,此时对k和v的操作都是对值得拷贝的操作,也需要map[k]来修改v的值
    	sm := make([]map[int]string, 5) //创建一个长度为5的map型的slice
    	for i, _ := range sm {
    		sm[i] = make(map[int]string, 1) //初始化sm当中的map
    		sm[i][10] = "ok"
    		fmt.Println(sm[i])
    	}
    	fmt.Println(sm)
    
    }
    
    
    • 键值对不存在时自动添加,使用delete()删除某键值对
    • 使用for range 对map和slice进行迭代操作
    package main
    
    import (
    	"fmt"
    	"sort"
    )
    
    func main() {
    	m := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}
    	s := make([]int, len(m))
    	i := 0
    	for k, _ := range m {
    		s[i] = k
    		i++
    	}
    	sort.Ints(s) //对map当中的k进行排序,这就是对map的间接排序
    	fmt.Println(s)
    
    }
    
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	m1 := map[int]string{1: "a", 2: "b", 3: "c"}
    	m2 := make(map[string]int)
    	fmt.Println(m2)
    	for k, v := range m1 {
    		m2[v] = k
    	}
    	fmt.Println(m2)
    }
    
    
  • 相关阅读:
    Numpy数据处理函数
    数据库-创建表
    描述统计学:表格法和图形法
    最短路 || POJ 1511 Invitation Cards
    搜索 || DFS || UOJ 146 信息传递
    最短路 || UOJ 19 寻找道路
    最短路 || POJ 1847 Tram
    博弈论
    筛选法 || POJ 3292 Semi-prime H-numbers
    团队第一次作业
  • 原文地址:https://www.cnblogs.com/skymyyang/p/7652637.html
Copyright © 2011-2022 走看看