1.5.4 map排序示例

一、Map排序

  1. 在Go语言中,map默认是无序的,不管是按照key还是按照value默认都不排序。

  2. 如果要为map排序,需要将key复制到一个切片,在对切片排序,然后使用for...range方法答应所有的keyvalue

    func sortMap() {
    	var arr map[int]int
    	arr = make(map[int]int, 5)
    	arr[0] = 88
    	arr[1] = 66
    	arr[2] = 99
    
    	// 定义一个切片
    	var b []int
    	fmt.Println("排序前的值如下:")
    	// 注意,map是无序的
    	for k, v := range arr {
    		fmt.Println(k, v)
    		b = append(b, v)
    	}
    
    	sort.Ints(b)
    	fmt.Println("排序后的值如下")
    	for k, v := range b {
    		fmt.Println(k, v)
    	}
    }

    结果:

    排序前的值如下:
    0 88
    1 66
    2 99
    排序后的值如下
    0 66
    1 88
    2 99

二、遍历地址问题

  1. 在Go语言的map中,进行for...range遍历的时候,便利的键值使用同一块地址,同时这块地址是临时分配的。虽然地址没有变化,但内容一直在变化,遍历的顺序是随机的,示例如下:

    结果:

三、map类型的切片

  1. 假设想获取一个map类型的切片,必须使用两次make()函数,第一次分配切片,第二次分配切片中的每一个map元素

    结果:

Last updated