Ir a idioma (básico) -mapa

1. Introducción

  • Una de las estructuras de datos más útiles en informática es la tabla hash. Las diferentes implementaciones de tablas hash proporcionan muchas características únicas. Pero básicamente incluye consulta, adición y eliminación de elementos. Go proporciona un mapa de tipos integrado, que implementa las funciones básicas de una tabla hash.
  • Entonces, si desea usar la tabla hash en el idioma Go, use map.

2. Uso básico del mapa

2.1, declaración e inicialización

2.1.1, declaración
var m map[string]int //此时 m 还没有被分配内存空间,是个 nil
  • Si no se asigna espacio al mapa y se insertan datos en él, no habrá error de inteligencia.
var m map[string]int
m["中国"] = 1
//报错:panic: assignment to entry in nil map

¡Nota! Al declarar el mapa, se requiere el tipo de datos de la clave, debe ser un tipo comparable y, para el valor, puede ser cualquier tipo de datos. Hay muchos tipos comparables, lo cual es difícil de recordar, pero solo hay tres tipos no comparables: slice, map y func .

2.1.2, inicialización
  • Inicializar el mapa es en realidad asignar espacio para el mapa. A continuación, hay tres formas de inicializar el mapa.
  • método uno
var m = map[string]int{
    
    } //不要笑看了这一对大括号,这样就算给 map 分配空间了
m["中国"] = 1
  • Camino dos
var m map[string]int
m = make(map[string]int, 2)
  • Camino tres
var m = map[string]int{
    
    
	"中国" : 1,
	"美国" : 2,
}

2.2, agregar, eliminar, modificar y verificar

var m = map[string]int{
    
    }
//1.增
m["中国"] = 1
m["美国"] = 2 //m->map[中国:1 美国:2]
//2.删
delete(m, "美国") //m->map[中国:1]
//3.改
m["中国"] = 100 //m->map[中国:0]
//4.查
val, ok := m["中国"] //val=100, ok=true
  • También puede verificarlo así, es decir, no necesita aceptar para recibir la presencia o ausencia de un determinado par clave-valor.
val := m["中国"] //val=100
  • Al eliminar un par clave-valor en el mapa anterior, si la clave correspondiente no existe en el mapa, no se realizarán cambios; cuando un par clave-valor no existe en el mapa de consulta, si no existe, el valor será devuelto El valor cero del tipo de datos, por ejemplo, el tipo de datos de valor es int, y el valor cero de int es 0.

2.3, atraviesa el mapa

func Traverse() {
    
    
	m := map[string]int{
    
    
		"china" : 1,
		"america" : 2,
		"england" : 3,
		"japan" : 4,
		"russia" : 5,
		"germany" : 6,
		"india" : 7,
	}
	for k, v := range m {
    
    
		fmt.Printf("number %d is %s\n", v, k)
	}
}
number 5 is russia
number 6 is germany
number 7 is india
number 1 is china
number 2 is america
number 3 is england
number 4 is japan
  • Al ver que el orden de visualización de los resultados del recorrido no coincide con el orden de inserción de los datos, ¿qué debo hacer si quiero recorrer de manera ordenada?
func SortTraverse() {
    
    
	m := map[string]int{
    
    
		"china" : 1,
		"america" : 2,
		"england" : 3,
		"japan" : 4,
		"russia" : 5,
		"germany" : 6,
		"india" : 7,
	}
	keys := []string{
    
    }
	for k := range m {
    
    
		keys = append(keys, k)
	}
	sort.Strings(keys)
	for _, k := range keys {
    
    
		fmt.Printf("number %d is %s\n", m[k], k)
	}
}
number 2 is america
number 1 is china
number 3 is england
number 6 is germany
number 7 is india
number 4 is japan
number 5 is russia

2.4, transferencia de parámetros de función

  • Como parámetro de función, a map se le pasa el valor de dirección de map. Si no lo cree, echemos un vistazo.
func ChangeMap(m map[string]int) {
    
    
	fmt.Printf("对 m 未做修改前:m 的地址是 %p\n", m)
	m["美国"] = 2
	fmt.Printf("对 m 插入1条数据后:m 的地址是 %p\n", m)
	m["俄罗斯"] = 3
	fmt.Printf("对 m 插入2条数据后:m 的地址是 %p\n", m)
	for i := 0; i < 9999998; i++ {
    
    
		m["国家" + strconv.Itoa(i)] = i
	}
	fmt.Printf("对 m 插入10000000条数据后:m 的地址是 %p\n", m)
}

func main() {
    
    
	m := make(map[string]int, 2)
	m["中国"] = 1
	//m["美国"] = 2
	fmt.Printf("main.传参前,m 的地址是 %p\n", m)
	Map.ChangeMap(m)
	fmt.Println(m["国家123456"])
}
main.传参前,m 的地址是 0xc0000b6330
ChangeMap.对 m 未做修改前:m 的地址是 0xc0000b6330
ChangeMap.对 m 插入1条数据后:m 的地址是 0xc0000b6330
ChangeMap.对 m 插入2条数据后:m 的地址是 0xc0000b6330
ChangeMap.对 m 插入10000000条数据后:m 的地址是 0xc0000b6330
main. 123456

Supongo que te gusta

Origin blog.csdn.net/wxy_csdn_world/article/details/115126650
Recomendado
Clasificación