Una map è un tipo di contenitore che contiene coppia chiave-valore, ovvero mappature da un valore a un altro. Gli elementi di una mappa sono ordinati in base all'ordine delle coppie chiave-valore al momento della creazione della mappa e puoi accedere agli elementi nella mappa utilizzando le chiavi univoche che hai definito.
Ad esempio, se vuoi tenere il conto di quante volte incontri una parola, puoi creare una mappa utilizzando la parola come chiave e il suo numero come valore.
WordCount : [string]int = map{"apple" => 11, "pear" => 7}Fai clic sull'immagine per ingrandirla.
Se usi la stessa chiave più volte quando inizializzi una mappa, questa manterrà solo l'ultimo valore fornito per quella chiave. Nell'esempio seguente, WordCount avrà solo la coppia chiave-valore "apple" => 2. Le coppie "apple" => 0 e "apple" => 1 vengono scartate.
WordCount : [string]int = map{"apple" => 0, "apple" => 1, "apple" => 2}Tipi di chiave supportati
Le coppie chiave-valore possono essere di qualsiasi tipo, purché il tipo di chiave sia confrontabile, perché deve esserci un modo per verificare se una chiave esiste già per una mappa.
I seguenti tipi possono essere utilizzati come chiavi:
Una classe, se è confrontabile
Un'opzione, se il tipo di elemento è confrontabile
Un array, se il tipo di elemento è confrontabile
Una mappa, se i tipi di chiave e di valore sono confrontabili
Una tupla se tutti gli elementi della tupla sono confrontabili
Lunghezza mappa
Puoi ottenere il numero di coppie chiave-valore in una mappa accedendo al campo Length della mappa. Ad esempio, map{"a" => "apple", "b" => "bear", "c" => "candy"}.Length restituisce 3.
Accesso agli elementi in una mappa
Puoi accedere a un elemento in una mappa utilizzando una chiave, ad esempio WordCount["apple"].
L'accesso a un elemento di una mappa è un'espressione fallibile e si può utilizzare solo in un contesto di fallimento, come ad esempio un'espressione if. Ad esempio:
ExampleMap : [string]string = map{"a" => "apple", "b" => "bear", "c" => "candy"}
for (Key->Value : ExampleMap):
Print("{Value} in ExampleMap at key {Key}")Keyframe | "a" | "b" | "c" |
Valore | "apple" | "bear" | "candy" |
Aggiunta e modifica degli elementi di una mappa
Puoi aggiungere elementi a una variabile mappa impostando la chiave di una mappa su un valore specifico. Ad esempio set ExampleMap["d"] = 4. Le coppie chiave-valore esistenti si possono aggiornare assegnando un valore a una chiave già esistente nella mappa.
L'aggiunta di un elemento a una mappa è un'espressione fallibile e si può utilizzare solo in un contesto di fallimento, come ad esempio un'espressione if. Ad esempio:
var ExampleMap : [string]int = map{"a" => 1, "b" => 2, "c" => 3}
# Modifying an existing element
if (set ExampleMap["b"] = 3, ValueOfB := ExampleMap["b"]):
Print("Updated key b in ExampleMap to {ValueOfB}")
# Adding a new element
if (set ExampleMap["d"] = 4, ValueOfD := ExampleMap["d"]):
Print("Added a new key-value pair to ExampleMap with value {ValueOfD}")Rimozione di elementi da una mappa
Gli elementi si possono rimuovere da una variabile mappa creando una nuova mappa che escluda la chiave che vuoi rimuovere. Di seguito viene fornito un esempio di funzione che fornisce la rimozione da mappe [string]int.
# Removes an element from the given map and returns a new map without that element
RemoveKeyFromMap(ExampleMap:[string]int, ElementToRemove:string):[string]int=
var NewMap:[string]int = map{}
# Concatenate Keys from ExampleMap into NewMap, excluding ElementToRemove
for (Key -> Value : ExampleMap, Key <> ElementToRemove):
set NewMap = ConcatenateMaps(NewMap, map{Key => Value})
return NewMapMappa debole
Il tipo weak_map è un supertipo del tipo map. Puoi utilizzare una weak_map quasi allo stesso modo in cui impiegheresti un tipo map, ma con alcune differenze chiave:
Non puoi eseguire una query su quanti elementi contiene una
weak_mapperchéweak_mapnon include un membroLength.Non puoi iterare gli elementi di una
weak_map.Non puoi utilizzare
ConcatenateMaps()su unaweak_map.
Un'altra differenza è che la definizione del tipo per una weak_map necessita di definire i tipi di coppie chiave-valore tramite la funzione weak_map, come MyWeakMap:weak_map(string, int) = map{}, che definisce una mappa debole denominata MyWeakMap che ha un keyframe di stringa associato con un valore intero. Dato che weak_map è un supertipo di map, puoi inizializzarla con una map{} standard.
Di seguito è riportato un esempio di creazione di una variabile weak_map e di accesso a un elemento nella mappa debole:
ExampleFunction():void=
var MyWeakMap:weak_map(int, int) = map{} # Supertype of the standard map, so it can be assigned from the standard map
if:
set MyWeakMap[0] = 1 # Same means of mutation of a particular element as the standard map
then:
if (Value := MyWeakMap[0]):
Print("Value of map at key 0 is {Value}")
set MyWeakMap = map{0 => 2} # Same means of mutation of the entire map as the standard mapTipo persistente
Una mappa è persistente se sia la chiave che i tipi di valore sono persistenti. Quando una mappa è persistente, significa che puoi utilizzarla nelle variabili weak_map, che sono sottoposte a scansione del modulo, e che i loro valori persistono nelle varie sessioni di gioco. Per maggiori dettagli sulla persistenza in Verse, consulta Utilizzo dei dati persistenti in Verse.