Ir Mapa del Lenguaje

prefacio

HashTabla es una estructura de datos inteligente y práctico es una desordenada key/valuecolección de pares, en el que la totalidad de la clave es diferente por una dada keypuede ser recuperada en un tiempo constante complejidad, actualizar o borrar la correspondiente value. Mapa es en realidad una Hashlista de referencias, puede recuperar rápidamente los datos en base a la clave, la misma tecla que el valor del índice asociado con el punto clave de. Tiene la oportunidad de dar usted habla Mapfondo de las cosas, que le enseña cómo utilizar Mapel enfoque de esta sección es que recordar una cosa: Maptienda de colección desordenada de pares de clave y valor.

Creación e inicialización

función de hacer uso

makePuede crear un sector, sino que también puede ser usado para crear Map. Regla es la siguiente:

m := make(map[keyType]valueType)

Vamos a tratar de crear:

month := make(map[string]int)
month["January"] = 1
month["February"] = 2
month["March"] = 3

La primera línea de código, crear un keytipo string, valueel tipo intde blanco Map month, a continuación, a monthasignar los tres pares.

uso literal

El código de seguridad, de manera literal se puede emplear para lograr:

month := map[string]int{"January":1,"February":2,"March":3}
// 还可以写成这样
month := map[string]int{
    "January":1,
    "February":2,
    "March":3,
}

Utilice literales también pueden crear vacíos Map, aparatos ortopédicos que no están asignados a la misma:

month := map[string]int{}
fmt.Println(month)        // 输出:map[]

Libre Map, no está allí nil Map? Prometiendo curso nilde Map:

var month map[string]int
fmt.Println(month == nil)    // 输出:true

Para nillos mapque no pueden acceder a pares clave-valor, de lo contrario será error panic: assignment to entry in nil map. Puede utilizar mencionadas makefunciones, a su inicialización:

var month map[string]int
month = make(map[string]int)
month["January"] = 1
fmt.Println(month)   // 输出:map[January:1]

La naturaleza puede pensar, Mapel valor es cero nil, Mapes decir, los que subyacen a Hashlas tablas de referencia.
MapEl keypuede ser un tipo incorporado, el tipo de estructura puede ser, se puede utilizar siempre y cuando los ==operadores de comparación, se puede utilizar como key. Secciones, funciones y estructuras del tipo que comprende secciones, a causa de estos tipos Referencia semántica, no como keyel uso de estos tipos de errores se traducirá en compilación:

month := map[[]string]int{}
// 编译错误:invalid map key type []string

Para Mapen valueél, no habría ninguna restricción sobre el tipo de curso no hay ninguna razón para impedir que los usuarios utilicen el corte como Mapvalores:

m := map[string][]int{}
slice := []int{1,2,3}
m["slice"] = slice
fmt.Println(m["slice"])

// 或者
slice := []int{1,2,3}
m := map[string][]int{"slice":slice}
fmt.Println(m["slice"])

Primera pieza de código, crear un keytipo string, un valor de slicetipo nulo Map, luego corte sliceasignada a la llamada slicede key. El segundo párrafo del código es una versión abreviada del primer párrafo del código.

Cómo utilizar el mapa

MapEl uso es muy simple, similar a la matriz, la matriz es utilizar el índice Mapde usar keypara obtener o modificar value.

m := map[string]int{}
m["January"] = 1        // 赋值
fmt.Println(m)            // 输出:map[January:1]
m["January"] = 10       //修改
fmt.Println(m)          // 输出:map[January:10]
january := m["January"]   // 获取value
fmt.Println(january)     // 输出:10

Cuando operación de modificación, si keyya existe, el nuevo valor sobrescribe el valor anterior, el código anterior se ha manifestado, por lo que keyno se le permite repetir.
Obtiene un inexistente keyen valueel tiempo, volverá a cero los valores correspondientes al tipo, esta vez, no sabemos es que hay un valor cero o pares de valores clave para la que no existe. Afortunadamente, Mapnos proporciona un método:

february,exists := m["February"]
fmt.Println(february,exists)   // 输出:0 false

Obtener más valor cuando un valor de retorno, el valor de retorno es el primero value, el segundo es el valor de retorno booleanvariable de tipo que indica valuesi hay o no. Esto nos da un juicio keysi existe proporciona una gran comodidad.

tecla de borrado para borrar

A diferencia Slice, Gonos proporciona una clave para la función de eliminación - deletefunción.
prototipo:

m := map[string]int{
    "January":1,
    "February":2,
    "March":3,
}
fmt.Println(m)     // 输出:map[March:3 January:1 February:2]
delete(m,"January")
fmt.Println(m)     // 输出:map[February:2 March:3]

Cuando se elimina un par clave-valor no existe, deletela función no se queja, no tuvo ningún efecto.

Mapa de recorrido

MapNo se puede usar forbucle a través de, como una matriz, rebanada, se puede utilizar rangepara atravesar.

for key, value := range m {
    fmt.Println(key, "=>", value)
}

salida:

February => 2
March => 3
January => 1

operador en blanco puede _ignorar el retorno keyo value. Al ejecutar repetidamente el código, se encuentra que el valor de retorno de la orden es probable que no es el mismo, es decir, Mapel recorrido que hay trastorno.

la función len

Puede utilizar len función devuelve el número de pares de clave y valor en el Mapa:

fmt.Println("len(m) =",len(m))

Mapa es un tipo de referencia

Mapa es una referencia a los datos subyacentes . El proceso de codificación, implica Mapcopiar, funciones de transferencia entre mapa y similares. Con Slicesimilares Mappuntos de datos subyacentes no va a pasar copyde.

m := map[string]int{
    "January":1,
    "February":2,
    "March":3,
}
month := m    
delete(month,"February")
fmt.Println(m)
fmt.Println(month)

salida:

map[January:1 March:3]
map[January:1 March:3]

El código anterior, Map mse le asigna a month, borrar monthun par clave-valor, mtambién ha cambiado, lo que indica que Mapla copia, my monthcompartir los datos subyacentes, en donde uno de los cambios de datos, el otro también cambiará. Del mismo modo, la función de transferencia entre Mapcuando, de hecho, aprobó una Mapreferencia a una copia de los datos subyacentes no estará involucrado, si se modifica en la función llamada Map, en la función de llamada será percibido Mapcambios.
¿Y si realmente quiero copiar Mapcómo hacerlo?

month := map[string]int{}
m := map[string]int{
    "January":1,
    "February":2,
    "March":3,
}
for key,value := range m{
    month[key] = value
}
delete(month,"February")
fmt.Println(m)
fmt.Println(month)

salida:

map[January:1 February:2 March:3]
map[January:1 March:3]

El código anterior, utilizamos rangelos mpares de valores clave asignadas al ciclo month, y luego quitar monthuno de los pares de valores clave, se puede ver por los resultados de la impresión, mno ha cambiado. Esto permite que una copia fiel.

Publicados 158 artículos originales · ganado elogios 119 · vistas 810 000 +

Supongo que te gusta

Origin blog.csdn.net/u013474436/article/details/103991017
Recomendado
Clasificación