Bir haritanın kilit kısmı için bir değişken nasıl kullanılır


109

Diyelim ki var

def A = "abc"
def X = "xyz"

Mapyerine nasıl bir yer yaratırım

def map = [A:1, X:2]

Bunun yerine yazmanın eşdeğerini alıyorum

def map = [abc:1, xyz:2]

ama bir değişken Ave Xanahtar için kullanabilir miyim?

Not: Haritanın değer kısmı için aynı soru.

Yanıtlar:


168

Bunu kullan:

def map = [(A):1, (X):2]

Değer kısmı için bu daha da kolay çünkü otomatik bir "metni dizeye dönüştürme" gerçekleşmiyor:

def map = [keyA:A, keyX:X]

11
Referans sağlamak için: Harita Dokümantasyonu diyor ki:To use the value of a String as the key value of a map, simply surround the variable with parenthesis.
mmigdol

1
@mmigdol bu alıntı dan eski harika belgelerinde de yeni belgelere onun böyle: 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..
Michal Bernhard

Öyleyse def map = [(A): 1, (X): 2] arasındaki fark nedir? ve def map = ["$ A": 1, (X): 2] varsa?
TriMix

2
@TriMix farkı Strings ile GStrings. İle [(A):1, (X):2], değişken bir String'e atlanıyor. İle ["$A":1, (X):2], "$A"bir GString ile sonuçlanan enterpolasyonlu bir dizedir. Haritalar, bir GString'in sağlamadığı anahtarların değişmez olmasını bekler.
Josh Lyon

20

İçin Ek Joachim cevap , varolan bir haritaya girişleri eklemek istediğiniz ve anahtarlar değişkenler ise, kullanım:

def map = [:]
def A = 'abc'
map[A] = 2

Eğer kullanırsan:

map.A = 2

Anahtar olarak 'A' değişmez dizesini kullanmak istediğiniz varsayılır (kapsamda A adında bir değişken olsa bile.

Güncelleme

@Tim_yates'in bir yorumda belirttiği gibi, şunları kullanırsanız bir anahtar değişken de çözülecektir:

map."$A" = 2

kişisel olarak [A]sözdizimini kullanmayı tercih ediyorum çünkü yeniden düzenleme araçları "$A", değişken yeniden adlandırılırsa referansı kaçırabilir


6
map."$A"sözdizimi size birlikte boş güvenli haritası navigasyon fayda verir map?."$A"kullanmakta ulaşamayacağını afaik, map[A]sözdizimi
Ghiro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.