Sobes.tech
Junior

Come funziona il tipo di dato Map in Go?

sobes.tech AI

Risposta dell'AI

Map — è una collezione non ordinata di coppie "chiave-valore" in Go.

Caratteristiche:

  • Le chiavi devono essere di tipi di dati confrontabili (numeri, stringhe, booleani, puntatori, canali, interfacce, se il tipo dinamico è confrontabile, e array se i loro elementi sono confrontabili). Non si possono usare slice, funzioni o altre map come chiavi.
  • I valori possono essere di qualsiasi tipo.
  • Map è un tipo di riferimento, il che significa che una variabile di tipo map contiene un puntatore alla struttura dati map in memoria. La modifica del map tramite una variabile sarà visibile attraverso altre variabili che fanno riferimento allo stesso map.
  • Il valore nullo per una map è nil. Non si può scrivere in una map nil; tentare di farlo provocherà un panic.
  • La dimensione della map cambia dinamicamente man mano che si aggiungono o rimuovono elementi.

Implementazione interna: Map in Go è implementato come una tabella hash (hash table). Ogni chiave viene hashata, e il risultato dell’hash viene usato per determinare la posizione del valore associato nella tabella.

// Creazione di una map
m := make(map[string]int)

// Aggiunta di elementi
m["uno"] = 1
m["due"] = 2

// Ottenere un valore
value, ok := m["uno"] // value = 1, ok = true
value, ok = m["tre"]  // value = 0 (valore zero per int), ok = false

// Rimuovere un elemento
delete(m, "due")

// Iterare sulla map (l’ordine non è garantito)
for key, value := range m {
	// ...
}

Confronto tra map: Due map sono considerate uguali solo se fanno riferimento alla stessa struttura interna, cioè, map1 == map2 solo se map1 e map2 sono la stessa variabile. Non si può confrontare il contenuto di una map usando ==. Per confrontare il contenuto, bisogna iterare su entrambe le map e confrontare i loro elementi.

Performance: Le operazioni di accesso, aggiunta e rimozione in una map hanno in media una complessità O(1). Nel caso peggiore (ad esempio, con molte collisioni di hash), possono richiedere O(n) in tempo.