Classificando mapas em GO

Prefácio

Na linguagem GO, map é uma tabela hash que pode mapear um tipo específico de chave para um tipo específico de valor. Ao consultar o conteúdo do Mapa, sua complexidade de tempo é O(1), o que é muito eficiente. Mas seu armazenamento não é linear e não há ordem alguma ao percorrer a saída. Se precisar exibir os elementos do mapa em ordem, você precisará da ajuda de outras estruturas de dados.

De acordo com os requisitos, este artigo fornece dois métodos de saída do mapa na ordem de chave e de saída do mapa na ordem de valor, respectivamente.

Mapa de saída em ordem de chave

A ideia é primeiro armazenar as chaves para classificação e depois acessar o mapa na ordem de classificação para obter os resultados classificados:

package main

import (
	"fmt"
	"sort"
)

func main() {
    
    
	m := make(map[int]int)
	m[2] = 5
	m[3] = 7
	m[1] = 6
	m[10] = 22
	m[8] = 9
	m[4] = 7
	fmt.Println("not sort:")
	for k, v := range m {
    
    
		fmt.Println(k, v)
	}
	// 得到key值
	var ks []int
	for k, _ := range m {
    
    
		ks = append(ks, k)
	}
	//对key排序
	sort.Ints(ks)
	//输出结果
	fmt.Println("sort:")
	for _, v := range ks {
    
    
		fmt.Println(v, m[v])
	}
}

Mapa de saída em ordem de valor

A ideia é primeiro armazenar os valores do mapa em uma estrutura, depois implementar a interface Sort na estrutura para implementar a classificação e, em seguida, gerar o resultado. O código é o seguinte:

package main

import (
	"fmt"
	"sort"
)

//定义结构体存放map值
type temp struct {
    
    
	k int
	v int
}
type temps []temp

//  实现sort包中Interface接口

func (t temps) Len() int {
    
    
	return len(t)
}

func (t temps) Less(i, j int) bool {
    
    
	return t[i].v < t[j].v
}

func (t temps) Swap(i, j int) {
    
    
	t[i], t[j] = t[j], t[i]
}

func main() {
    
    
	m := make(map[int]int)

	m[2] = 5
	m[3] = 7
	m[1] = 6
	m[10] = 22
	m[8] = 9
	m[4] = 7
	fmt.Println("not sort:")
	for k, v := range m {
    
    
		fmt.Println(k, v)
	}
	// 得到key值
	var ts temps
	for k, v := range m {
    
    
		ts = append(ts, temp{
    
    k: k, v: v})
	}
	//对key排序
	sort.Sort(ts)
	//输出结果
	fmt.Println("sort:")
	for _, v := range ts {
    
    
		fmt.Println(v.k, v.v)
	}

}

Acho que você gosta

Origin blog.csdn.net/doreen211/article/details/125804019
Recomendado
Clasificación