マップの主要部分に変数を使用する方法


109

私が持っているとしましょう

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

Map代わりに、場所を作成する方法

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

代わりに書くのと同じです

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

しかし、変数AXキーに使用できますか?

PS:マップの値の部分についても同じ質問です。

回答:


168

これを使って:

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

値の部分については、自動マジック「テキストを文字列に変換」が行われないため、さらに簡単です。

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

11
参照を提供するためだけに:マップドキュメントは言う:To use the value of a String as the key value of a map, simply surround the variable with parenthesis.
mmigdol

1
@mmigdolこの引用からある古いグルーヴィードキュメント、最新のドキュメントのこのような: 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..
ミハル・ベルンハルト

したがって、def map = [(A):1、(X):2]の違いは何ですか。そして、def map = ["$ A":1、(X):2]もしあれば?
TriMix

2
@TriMixの違いは、文字列とG文字列です。を使用する[(A):1, (X):2]と、変数は文字列にエスケープされます。を使用する["$A":1, (X):2]と、"$A"は補間された文字列であり、結果としてGStringになります。マップはキーがGStringが提供しない不変であることを期待しています。
ジョシュリヨン

20

さらにヨアヒムの答えは、既存のマップにエントリを追加すると、キーが変数である場合には、次を使用します。

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

使用する場合:

map.A = 2

Aという名前の変数がスコープ内にある場合でも、リテラル文字列「A」をキーとして使用することを想定しています。

更新

@tim_yatesがコメントで指摘したように、キー変数も使用すると解決されます。

map."$A" = 2

個人的には、変数の名前を変更すると[A]リファクタリングツールが"$A"参照を見逃す可能性があるため、構文を使用することを好みます。


6
map."$A"構文は、あなたとヌル安全マップナビゲーションの利点を与えるmap?."$A"あなたが使用して達成することができない私の知る限り、map[A]構文
Ghiroの
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.