[Ir] aprendizaje de idiomas (f) un mapa

mapa

mapa se basa en una desordenada key-valueestructura de datos, mapa y rebanadas lenguaje Go son los tipos de referencia, debe ser inicializado antes de su uso .

definiciones mapa

Ir lenguaje  mapde sintaxis define como sigue:

map[KeyType]ValueType

Entre ellos,

  • KeyType: indica el tipo de enlace.
  • ValueType: representa el tipo del valor correspondiente a la clave.

correlacionar el tipo de defecto variable de valor inicial es nula, necesidad de utilizar la función de marca () para asignar memoria . La sintaxis es la siguiente:

make(map[KeyType]ValueType, [cap])

Cuando la tapa representa la capacidad del mapa, aunque no se requiere este parámetro, sino que debe asignarle una capacidad adecuada al inicializar el mapa .

Mapa de uso básico

Los datos del mapa se está produciendo en pares, el código básico mapa de ejemplo es como sigue:

/* 创建map,并初始化 */
	var m1 map[string]int
	fmt.Println(m1 == nil)        //true:还没有初始化(没有在内存中开辟空间)
	m1 = make(map[string]int, 10) //估算好map的容量,避免在程序运行期间在动态扩容
	m1["李子健"] = 100
	m1["lizijian"] = 10
	fmt.Println(m1)

salida:

true
map[lizijian:10 李子健:100]

mapa también soporta elemento de llenado cuando se declaró , por ejemplo:

func main() {
	userInfo := map[string]string{
		"username": "李子健",
		"password": "123456",
	}
	fmt.Println(userInfo) //
}

Para obtener los datos de los mapas

/* 向map中取数据,(会返回两个值,value和ok一起接受)
	   约定熟成用ok接受返回的bool值 */
	value, ok := m1["李子健"]

	if !ok {
		fmt.Println("查无此key")
	} else {
		fmt.Println(value)
	}

mapa del recorrido

Ir lenguaje utilizado for rangeal mapa de recorrido.

/* 遍历map值 */
	for key, value := range m1 {
		fmt.Println(key, value)
	}

Nota:  los elementos cuando se atraviesa el mapa sin importar el orden con el fin de añadir pares clave-valor.

Utilice la función de borrado () para eliminar los pares de valores clave

Utilice delete()la función incorporada para quitar la clave del mapa un conjunto de pares delete()de formato funciona como sigue:

delete(map, key)

Entre ellos,

  • Mapa: pares de valores clave de borrado mapa
  • clave: la clave para ser eliminado representa pares de valores clave

Código de la muestra es la siguiente:

/* 删除map */
	delete(m1, "lizijian")
	delete(m1, "lijiayang") //删除不存在的值不报错
	fmt.Println(m1)

Mapa de orden transversal especificado

/* 按照指定的key值顺序取出值 */

	m2 := make(map[string]int, 100)
	// 生成一个随机的map
	for i := 0; i < 100; i++ {
		key := fmt.Sprintf("stu%02d", i) //比较重要
		value := rand.Intn(100)
		m2[key] = value
	}
	fmt.Println(m2)
	//用一个切片keys去存储map中所有的key值
	var keys = make([]string, 0, 200)
	for key := range m2 {
		keys = append(keys, key)
	}
	//对切片进行排序
	sort.Strings(keys)

 	//通过排好序的keys中的key去遍历map
	for _, key := range keys {
		fmt.Println(key, m2[key])
	} 

Tipo de elementos del mapa en rodajas

El código siguiente muestra el funcionamiento de secciones de elementos cuando un tipo de mapa:

/* 元素为map类型的切片 */
	mapslice := make([]map[int]string, 10, 10)
        //初始化一个类型为map的切片
	for i, v := range mapslice {
		fmt.Println(i, v)
	}

	//对切片中的map元素进行初始化
	mapslice[0] = make(map[int]string, 10)
	mapslice[0][1] = "小王子"
	for index, value := range mapslice {
		fmt.Println(index, value)
	}

Nota: rebanada y el mapa son los tipos de referencia, se requiere el uso del tiempo para inicializar

Rebanada de valores de tipo de mapa

El código siguiente muestra los tipos de segmento valor del mapa de acciones:

    /*值为切片类型的操作:*/
	sliceMap:=make(map[string][]int,10)
	value1:=make([]int,10,10)//很重要
	sliceMap["李子健"]=value1//很重要
	for key,value:=range sliceMap{
		fmt.Println(key,value)
	}

Nótese la diferencia entre el nuevo y hacer que el

Echemos un vistazo a un ejemplo:

func main() {
	var a *int
	*a = 100
	fmt.Println(*a)

	var b map[string]int
	b["沙河娜扎"] = 100
	fmt.Println(b)
}

La implementación del código anterior dará lugar al pánico, ¿por qué? Ir a la lengua en la variable de tipo de referencia, no sólo tenemos que declarar que cuando está en uso, sino también para asignar espacio de memoria para que, de lo contrario no tenemos ninguna manera de almacenar el valor. En cuanto al valor del tipo de declaración que no es necesario asignar espacio de memoria, porque no tienen un buen espacio de memoria asignado por defecto en el momento de la declaración. Para asignar memoria, se lleva a cabo de la actual nueva y hacer. Ir y hacer nuevos idiomas están integradas dos funciones, utilizan principalmente para asignar memoria.

nuevo

es una nueva funciones integradas, su firma de la función de la siguiente manera:

func new(Type) *Type

Entre ellos,

  • Type indica el tipo, la nueva función acepta un parámetro, que es un tipo
  • * Tipo indica el tipo de puntero, nuevos función devuelve un puntero al tipo de dirección de memoria.

menos nueva función común, utilizando una nueva función obtenida es el tipo de puntero, y el valor del valor cero correspondiente al tipo del puntero. Por ejemplo:

func main() {
	a := new(int)
	b := new(bool)
	fmt.Printf("%T\n", a) // *int
	fmt.Printf("%T\n", b) // *bool
	fmt.Println(*a)       // 0
	fmt.Println(*b)       // false
}	

El código de ejemplo en el comienzo de esta sección var a *intsólo se declara una variable puntero, pero no inicializar un puntero como el tipo de referencia y tienen una necesidad para inicializar el espacio de memoria después, se puede asignar a la misma. Se debe utilizar la nueva funciones integradas puede ser normal después de su asignación para una inicializado como sigue:

func main() {
	var a *int
	a = new(int)
	*a = 10
	fmt.Println(*a)
}

hacer

También hacen para la asignación de memoria, diferente de nuevo, solamente rebanada usado, el mapa y la creación de la memoria de Chan , y el tipo de retorno es estos tres tipo en sí, más que por su tipo de puntero, debido a que estos tres tipos es tipos de referencia, lo que no hay necesidad de volver a las manos en alto. firma de la función realice las siguientes funciones:

func make(t Type, size ...IntegerType) Type

función de marca es insustituible, utilizamos la rebanada, mapa y canal, ambos necesidad de inicializar antes de poder operar en ellos. Esto lo hemos explicado en el capítulo anterior, se explicará en detalle sobre el canal en los capítulos siguientes.

Los ejemplos de esta sección a partir de var b map[string]intsimplemente declarar una variable b es una variable de tipo de mapa, y luego necesitan algo así como el código de ejemplo como función hacer uso de inicialización se pueden asignar pares de valores clave:

func main() {
	var b map[string]int
	b = make(map[string]int, 10)
	b["沙河娜扎"] = 100
	fmt.Println(b)
}

Nuevo y hacer una diferencia

  1. Ambos se utilizan para la asignación de memoria.
  2. hacer sólo para inicializar rebanada, mapa y canal, o el regreso de los tres tipos de referencia en sí;
  3. Y para el nuevo tipo de asignación de memoria, tipo de memoria y un valor correspondiente al valor cero de la aguja de retorno es un tipo de puntero.

​​​​​​​

La referencia que aquí Levin el blog de la semana , y añadir un poco de su propia comprensión

 

Publicado 14 artículos originales · ganado elogios 7 · vistas 1527

Supongo que te gusta

Origin blog.csdn.net/weixin_39966701/article/details/105337108
Recomendado
Clasificación