Como Iterar Sobre um Mapa Inteiro em Go

Suraj Joshi 1 novembro 2020
  1. Declare e inicialize os mapas
  2. Iterate Over a Map in Go
Como Iterar Sobre um Mapa Inteiro em Go

As tabelas de hash são uma das estruturas de dados mais poderosas e versáteis da Ciência da Computação. Há variedades de implementações de tabelas de hash para diferentes linguagens de programação. Em Go, as tabelas de hash são implementadas como tipos de dados map embutidos. Em resumo, um map é uma coleção de pares de valores-chave. Utilizamos a declaração para...alcance em Go para fazer um loop sobre toda a chave de um map, recuperando uma chave de cada vez.

Declare e inicialize os mapas

Um map pode ser declarado utilizando a seguinte sintaxe:

var map_name map[KeyType]ValueType

Onde KeyType é qualquer tipo de dado comparável e ValueType é também qualquer tipo de dado incluindo o próprio map.

package main

import "fmt"

func main() {
    map_1 := map[int]string{
        0: "Alok",
        1: "Reman",
        2: "Riken",
        3: "Rudra",
    }

    fmt.Println(map_1)
}        

Resultado:

map[0:Alok 1:Reman 2:Riken 3:Rudra]

Os Maps também podem ser criados utilizando a função inbuilt make().

package main

import "fmt"

func main() {
    var map_2 = make(map[int]string)
    map_2[0] = "Alok"
    map_2[1] = "Reman"
    map_2[2] = "Riken"
    map_2[3] = "Rudra"
    fmt.Println(map_2)

}        

Resultado:

map[0:Alok 1:Reman 2:Riken 3:Rudra]

Iterate Over a Map in Go

Podemos iterar ao longo de todo o map utilizando declarações para...alcance. Entretanto, a ordem de iteração sobre um map não é fixa, pois o map é uma coleção não ordenada.

Iterate Over All Keys and Values of a map in Go

package main

import "fmt"

func main() {
    map_1 := map[int]string{
        0: "Alok",
        1: "Reman",
        2: "Riken",
        3: "Rudra",
    }

    for k, v := range map_1 {
        fmt.Printf("Key:%v Value: %s\n", k, v)
    }

}    

Resultado:

Key:0 Value: Alok
Key:1 Value: Reman
Key:2 Value: Riken
Key:3 Value: Rudra

Entretanto, se você estiver utilizando diferentes tipos de dados para chaves ou valores do map, então você deve especificar o formato para esse tipo específico de dados enquanto imprime chaves ou valores. Um exemplo de um map com string do tipo de dados como chaves é mostrado abaixo:

package main

import "fmt"

func main() {
    map_1 := map[string]string{
        "Giri    ": "Alok",
        "Nembang ": "Reman",
        "Maharjan": "Riken",
        "Jha     ": "Rudra",
    }

    for k, v := range map_1 {
        fmt.Printf("Key:%v  Value: %s\n", k, v)
    }

}
    

Resultado:

Key:Giri      Value: Alok
Key:Nembang   Value: Reman
Key:Maharjan  Value: Riken
Key:Jha       Value: Rudra

Iterate Over Keys Only in Go map (Iterate Over Keys Only in Go map)

package main

import "fmt"

func main() {
    map_1 := map[int]string{
        0: "Alok",
        1: "Reman",
        2: "Riken",
        3: "Rudra",
    }

    for k := range map_1 {
        fmt.Printf("Key:%v\n", k)
    }

}

Resultado:

Key:0
Key:1
Key:2
Key:3

Iterate Over Values Only in Go map (Iterate Over Values Only in Go map)

package main

import "fmt"

func main() {
    map_1 := map[int]string{
        0: "Alok",
        1: "Reman",
        2: "Riken",
        3: "Rudra",
    }

    for _, v := range map_1 {
        fmt.Printf("Value:%s\n", v)
    }
}    

Resultado:

Value:Riken
Value:Rudra
Value:Alok
Value:Reman

A ordem em que os pares chave e valor na saída acima e a ordem em que os pares valor chave são impressos no seu lado podem diferir porque o map é uma coleção não ordenada. Portanto, você não precisa se preocupar com isso.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artigo relacionado - Go Map