Go map

map特点:

map是无序的基于key-value的数据结构。map是引用类型,其内部使用散列表(hash)实现

必须初始化才能使用

map操作:

    var m1 map[string]int         //声明:key为string类型,值为int类型
    m1 = make(map[string]int, 10) //初始化:必须要初始化才能用.并且要预估容量,避免在运行中动态扩容
    //存值
    m1["a"] = 1
    m1["b"] = 2
    //取值
    value, ok := m1['c']      //如果取一个不存在的值:value=对应类型的零值, ok=false
    遍历
    for k, v := range m1 {
        fmt.println(k, v)
    }
    for k := range m1 {
        fmt.println(k)
    }
    for _, v := range m1 {
        fmt.println(v)
    }

    删除
    delete(m1, "a")
    delete(m1, "ff")     //删除不存在的key,不做任何操作

“元素类型为map的切片”  vs   “值为切片类型的map”

// 元素类型为map的切片
var s1 = make([]map[int]string, 0, 10)
s1[0][100] = "A" //失败。切片长度是0没有对map初始化
s1[0] = make(map[int]string, 1)

// 值为切片类型的map
var m1 = make(map[string][]int, 10)
m1["bj"] = []int{10,20,30}

按随机顺序遍历

	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])
	}
原文地址:https://www.cnblogs.com/staff/p/13220911.html