Programa Golang que usa estructuras como claves de mapa

Un mapa en Golang es una colección de pares desordenados de clave-valor. Es ampliamente utilizado porque proporciona búsquedas rápidas y valores que pueden recuperarse, actualizarse o eliminarse con la ayuda de claves.

Sintaxis:

map[Key_Type]Value_Type{}

Ejemplo: var muestra mapa[string]int

Aquí, el ejemplo es un mapa que tiene una string como clave y un tipo int como valor.

En los mapas, la mayoría de los tipos de datos se pueden usar como clave, como int, string, float64, rune, etc. Los mapas también permiten usar estructuras como claves. Estas estructuras deben compararse entre sí. Una estructura o struct en Golang es un tipo definido por el usuario que permite combinar campos de diferentes tipos en un solo tipo.

Ejemplo de una estructura:

type Student struct {
      name string 
      rollno int
      class string
      city string
}

Veamos cómo implementar una estructura en un mapa:

Ejemplo 1:

// Golang program to show how to
// use structs as map keys
package main
  
// importing required packages
import "fmt"
  
//declaring a struct
type Address struct {
    Name    string
    city    string
    Pincode int
}
  
func main() {
  
    // Creating struct instances
    a2 := Address{Name: "Ram", city: "Delhi", Pincode: 2400}
    a1 := Address{"Pam", "Dehradun", 2200}
    a3 := Address{Name: "Sam", city: "Lucknow", Pincode: 1070}
  
    // Declaring a map
    var mp map[Address]int
      
    // Checking if the map is empty or not
    if mp == nil {
        fmt.Println("True")
    } else {
        fmt.Println("False")
    }
    // Declaring and initialising
    // using map literals
    sample := map[Address]int{a1: 1, a2: 2, a3: 3}
    fmt.Println(sample)
}

Producción:

True
map[{Pam Dehradun 2200}:1 {Ram Delhi 2400}:2 {Sam Lucknow 1070}:3]

Iterando sobre un mapa: también puede ejecutar un ciclo para acceder y operar cada tecla del mapa individualmente.

Ejemplo 2:

// Golang program to show how to
// use structs as map keys
package main
  
// importing required packages
import "fmt"
  
// declaring a struct
type Address struct {
    Name    string
    city    string
    Pincode int
}
  
func main() {
    // Creating struct instances
    a1 := Address{"Pam", "Mumbai", 2200}
    a2 := Address{Name: "Ram", city: "Delhi", Pincode: 2400}
    a3 := Address{Name: "Sam", city: "Lucknow", Pincode: 1070}
  
    // Declaring and initialising using map literals
    sample := map[Address]int{a1: 1, a2: 2, a3: 3}
    for str, val := range sample {
        fmt.Println(str, val)
    }
  
    // You can also access a struct
    // field while using a loop
    for str := range sample {
        fmt.Println(str.Name)
    }
}

Producción:

{Ram Delhi 2400} 2
{Sam Lucknow 1070} 3
{Pam Mumbai 2200} 1
Pam
Ram
Sam

Adición de pares clave:valor en el mapa: La adición de pares clave:valor en un mapa se realiza utilizando la sintaxis dada:

map_name[struct_instance]=value 

Si ya existe un par clave-valor en el mapa, simplemente actualizará el par anterior con el nuevo.

Ejemplo 3:

// Adding key:value pair in a map
package main
  
// importing required packages
import "fmt"
  
// declaring a struct
type Student struct {
    Name   string
    rollno int
    course string
}
  
func main() {
  
    // Creating struct instances
    a1 := Student{"Asha", 1, "CSE"}
    a2 := Student{"Aishwarya", 1, "ECE"}
    a3 := Student{"Priya", 2, "MECH"}
  
    // Declaring and initialising
    // using map literals
    mp := map[Student]int{a1: 1, a2: 2}
    fmt.Println("Original map was", mp)
    mp[a3] = 3
    mp[Student{"Ram", 3, "CSE"}] = 4
  
    // Values have their zero values
    // Here initial value was 0 after 
    // incrementing it became 1
    mp[Student{"Tina", 44, "EEE"}]++
  
    fmt.Println("After adding key:value "+
     "pairs to the map, Updated map is:", mp)
}

Producción:

El mapa original era map[{Aishwarya 1 ECE}:2 {Asha 1 CSE}:1]
Después de agregar pares clave:valor al mapa, el mapa actualizado es: map[{Aishwarya 1 ECE}:2 {Asha 1 CSE}:1 {Priya 2 MECH}: 3 {Ram 3 CSE}: 4 {Tina 44 EEE}: 1]

Eliminación de una clave de estructura del mapa: puede eliminar una clave de estructura del mapa mediante la función eliminar(). Es una función incorporada y no devuelve ningún valor y no hace nada si la clave no se presenta en el mapa dado. La sintaxis del mismo es la siguiente:

delete(map_name, struct_key)

Ejemplo 4:

// Deleting key: value pair in a map
package main
  
// importing required packages
import "fmt"
  
// declaring a struct
type Student struct {
    Name   string
    rollno int
    course string
}
  
func main() {
    // Creating struct instances
    a1 := Student{"Asha", 1, "CSE"}
    a2 := Student{"Aishwarya", 1, "ECE"}
    a3 := Student{"Priya", 2, "MECH"}
    a4 := Student{"Ram", 3, "CSE"}
  
    // Declaring and initialising using map literals
    mp := map[Student]int{a1: 1, a2: 2, a3: 3, a4: 4}
  
    delete(mp, a4)
    fmt.Println("The remaining map after deletion:")
    for str, i := range mp {
        fmt.Println(str, "=", i)
    }
  
}

Producción:

The remaining map after deletion:
{Asha 1 CSE} = 1
{Aishwarya 1 ECE} = 2
{Priya 2 MECH} = 3

Comprobación de la existencia de un par clave:valor: puede comprobar si una estructura está presente en el mapa o no. A continuación se muestra la sintaxis para verificar la existencia de un par de valores struct_key: en el mapa:

// Esto da el valor y el resultado de la verificación
// Si el resultado de la verificación es Verdadero, significa que la clave está presente
// Si el resultado de la verificación es Falso, significa que falta la clave y, en ese caso, el valor toma un
valor de valor cero, check_variable_name:= map_name[clave]

o

// Sin valor usando el identificador en blanco
// Solo dará resultado de verificación
_, check_variable_name:= map_name[key]

Ejemplo 6:

// Golang program to check if a
// struct key is present
package main
  
// importing required packages
import "fmt"
  
// declaring a struct
type Student struct {
    Name   string
    rollno int
    course string
}
  
func main() {
    // Creating struct instances
    a1 := Student{"Asha", 1, "CSE"}
    a2 := Student{"Aishwarya", 1, "ECE"}
    a3 := Student{"Priya", 2, "MECH"}
    a4 := Student{"Ram", 3, "CSE"}
  
    // Declaring and initialising
    // using map literals
    mp := map[Student]string{a1: "First", 
     a2: "Second", a3: "Third", a4: "Fourth"}
  
    value, check := mp[a4]
    fmt.Println("Is the key present:", check)
    fmt.Println("Value of the key:", value)
  
    _, check2 := mp[a2]
    fmt.Println("Is the key present:", check2)
  
}

Producción:

Is the key present: true
Value of the key: Fourth
Is the key present: true

Publicación traducida automáticamente

Artículo escrito por Hritika Rajput y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *