Copiare una mappa
Lezione 18 di 21 del corso Slice e mappe in GoLang di Coddy.
In modo simile a quanto abbiamo fatto con le slice, possiamo copiare una mappa e aggiungervi nuovi valori.
Consideriamo una mappa come questa:
products := map[string]int{
"MacBook": 5000,
"iPhone": 1000,
"Vision pro": 3000,
}Supponiamo di dover copiare la mappa products:
list := productsQuesta operazione copierà la mappa products in list. Tuttavia, il problema è che le modifiche apportate a una mappa influenzeranno anche l'altra, poiché condividono lo stesso spazio di memoria. Possiamo verificarlo stampando i loro indirizzi di memoria:
fmt.Printf("%p \n", list)
fmt.Printf("%p", products)L'output è il seguente:
0xc00010e0c0
0xc00010e0c0La soluzione è usare la parola chiave make. Per prima cosa dichiariamo una mappa usando la parola chiave make:
list := make(map[string]int)Ora potresti chiederti: qual è la differenza tra usare make o una semplice dichiarazione come questa?
list := map[string]int{}In realtà non c'è differenza, tranne per il fatto che usando make possiamo definire una lunghezza per la mappa.
list := make(map[string]int, len(products))Qui impostiamo la lunghezza in modo che corrisponda a quella della mappa che vogliamo copiare.
Nota: la lunghezza di una mappa non è come quella di una slice. Anche se definiamo una lunghezza, possiamo superarla senza problemi.
Ora, dopo aver definito la nostra nuova mappa, possiamo copiare gli elementi da products alla mappa list usando un ciclo:
list := make(map[string]int, len(products))
for key, value := range products {
list[key] = value
}Il risultato sarà:
map[Golang Book:400 Python Book:300 Rust Book:500]Ora, se modifichiamo una mappa, non influenzerà l'altra.
Sfida
FacileNel codice fornito, definiamo una mappa di prodotti chiamata productByName:
- Crea una nuova mappa chiamata productByPrice.
- Copia gli elementi dalla mappa productByName, ma in modo inverso: il prezzo sarà la chiave e il nome sarà il valore.
- Stampa entrambe le mappe sullo schermo.
Provalo tu
package main
import "fmt"
func main() {
// Definisci una mappa dei prodotti per nome. Non modificarla!
productByName := map[string]int{
"MacBook": 5000,
"iPhone": 1000,
"Vision Pro": 3000,
}
// Crea una nuova mappa dei prodotti per prezzo
// Copia gli elementi da productByName a productByPrice
// Stampa entrambe le mappe sullo schermo
fmt.Println("By Name:", )
fmt.Println("By Price:", )
}Tutte le lezioni di Slice e mappe in GoLang
1Introduzione
Introduzione4Mappe
MappeCopiare una mappaAggiungere ed eliminare elementiVerificare la presenza di una chiaveSfida di ripasso #1Esercitati da solo: Compilatore Go online