Un mapa es un tipo de contenedor que contiene pares clave-valor que son asignaciones de un valor a otro. Los elementos en el mapa están ordenados con base en el orden de los pares clave-valor al crear el mapa; es posible acceder a los elementos del mapa mediante las claves únicas que defines.
Por ejemplo, si quieres llevar un recuento de las veces que te encuentras con una palabra, puedes crear un mapa utilizando las palabras como claves y su recuento como valores.
WordCount : [string]int = map{"apple" => 11, "pear" => 7}Haz clic en la imagen para ampliarla.
Si utilizas la misma clave varias veces al inicializar un mapa, el mapa solo conservará el último valor proporcionado para esa clave. En el siguiente ejemplo, WordCount solo tendrá el par clave-valor "apple" => 2. Los pares "apple" => 0 y "apple" => 1 se descartan.
WordCount : [string]int = map{"apple" => 0, "apple" => 1, "apple" => 2}Tipos de claves admitidas
Los pares clave-valor pueden ser de cualquier tipo siempre que el tipo de clave sea comparable, porque debe haber una manera de comprobar si la clave ya existe en un mapa.
Los siguientes tipos pueden utilizarse como claves:
Una clase, si es comparable
Una opción, si el tipo de elemento es comparable
Una matriz, si el tipo de elemento es comparable
Un mapa si los tipos de clave y de valor son comparables
Una tupla si todos los elementos de la tupla son comparables
Longitud del mapa
Puedes obtener el número de pares clave-valor de un mapa accediendo al campo Longitud del mapa. Por ejemplo, map{"a" => "apple", "b" => "bear", "c" => "candy"}.Length devuelve 3.
Cómo acceder a los elementos en un mapa
Puedes acceder a un elemento en un mapa con una clave, por ejemplo WordCount["manzana"].
Acceder a un elemento en un mapa es una expresión falible y solo puede usarse en un contexto de fallo, como una expresión if. Por ejemplo:
ExampleMap : [string]string = map{"a" => "apple", "b" => "bear", "c" => "candy"}
for (Key->Value : ExampleMap):
Print("{Value} in ExampleMap at key {Key}")Clave | "a" | "b" | "c" |
Valor | "manzana" | "oso" | "dulces" |
Cómo añadir y modificar elementos en un mapa
Puedes añadir elementos a una variable de mapa al establecer la clave de un mapa en un valor específico. Por ejemplo, set ExampleMap["d"] = 4. Los pares clave-valor existentes pueden actualizarse al asignar de forma similar un valor a una clave que ya existe en el mapa.
Añadir un elemento a un mapa es una expresión falible y solo puede utilizarse en un contexto de fallo, como una expresión if. Por ejemplo:
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}")Cómo eliminar elementos de un mapa
Los elementos pueden eliminarse de una variable de mapa mediante la creación de un nuevo mapa que excluya la clave que deseas eliminar. A continuación, verás un ejemplo de una función que brinda la eliminación de los mapas [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 NewMapMapa débil
El tipo weak_map es un supertipo del tipo map. Usarías un weak_map de manera similar a como usarías el tipo mapa en la mayoría de los casos, pero con las siguientes excepciones:
No puedes consultar cuántos elementos contiene un
weak_mapporqueweak_mapno tiene un miembroLength.No puedes iterar en los elementos de un
weak_map.No puedes usar
ConcatenateMaps()en unweak_map.
Otra diferencia es que el tipo de definición para un weak_map requiere que definas los tipos de pares clave-valor con la función weak_map, por ejemplo, MyWeakMap:weak_map(string, int) = map{}, que define un mapa débil llamado MyWeakMap que tendrá una clave de cadenas emparejada con un valor de número entero. Dado que weak_map es un supertipo de map, puedes inicializarlo con un map{} estándar.
A continuación, se visualiza un ejemplo para crear una variable weak_map e introducir un elemento en el mapa débil:
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
Un mapa es persistente si los tipos de clave y valor son persistentes. Cuando un mapa es persistente, quiere decir que la puedes usar en tus variables weak_map del módulo y hacer que sus valores persistan a lo largo de las sesiones de juego. Para obtener más información sobre la persistencia en Verse, consulta Cómo usar datos persistentes en Verse.