Digamos que tenho
def A = "abc"
def X = "xyz"
como faço para criar um Map
onde, em vez de
def map = [A:1, X:2]
Em vez disso, recebo o equivalente a escrever
def map = [abc:1, xyz:2]
mas pode usar variáveis A
e X
para a chave?
PS: Mesma pergunta para a parte de valor do 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]
, a variável está sendo escapada em uma String. Com["$A":1, (X):2]
,"$A"
é uma string interpolada que resulta em um GString. Os mapas esperam que as chaves sejam imutáveis, o que um GString não fornece.Na sequência da resposta de Joachim , se você quiser adicionar entradas a um mapa existente e as chaves são variáveis, use:
Se você usar:
Presume-se que você deseja usar a string literal 'A' como a chave (embora haja uma variável chamada A no escopo.
Atualizar
Como @tim_yates apontou em um comentário, uma variável-chave também será resolvida se você usar:
embora pessoalmente eu prefira usar a
[A]
sintaxe porque as ferramentas de refatoração podem perder a"$A"
referência se a variável for renomeadafonte
map."$A"
sintaxe oferece o benefício de navegação nula segura no mapamap?."$A"
, que AFAIK você não pode alcançar usando amap[A]
sintaxe