Digamos que tengo
def A = "abc"
def X = "xyz"
¿Cómo creo un Map
dónde, en lugar de
def map = [A:1, X:2]
Obtengo en cambio el equivalente a escribir
def map = [abc:1, xyz:2]
pero ¿se pueden utilizar variables A
y X
para la clave?
PD: La misma pregunta para la parte de valor del mapa.
To use the value of a String as the key value of a map, simply surround the variable with parenthesis.
Map keys are strings by default: [a:1] is equivalent to ['a':1]. This can be confusing if you define a variable named a and that you want the value of to be the key in your map. If this is the case, then you must escape >the key by adding parenthesis..
[(A):1, (X):2]
, la variable se escapa a una cadena. Con["$A":1, (X):2]
,"$A"
es una cadena interpolada que da como resultado una GString. Los mapas esperan que las claves sean inmutables, lo que no proporciona un GString.Además de la respuesta de Joachim , si desea agregar entradas a un mapa existente y las claves son variables, use:
Si utiliza:
Se supone que desea utilizar la cadena literal 'A' como clave (aunque hay una variable denominada A en el alcance.
Actualizar
Como @tim_yates señaló en un comentario, una variable clave también se resolverá si usa:
aunque personalmente prefiero usar la
[A]
sintaxis porque las herramientas de refactorización pueden perder la"$A"
referencia si se cambia el nombre de la variablefuente
map."$A"
sintaxis le brinda el beneficio de una navegación de mapa segura y nula conmap?."$A"
, que AFAIK no puede lograr usando lamap[A]
sintaxis