Cách sử dụng một biến cho phần quan trọng của bản đồ


109

Giả sử tôi có

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

làm cách nào để tạo một Mapnơi, thay vì

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

Thay vào đó tôi nhận được tương đương với việc viết

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

nhưng có thể sử dụng một biến AXcho khóa không?

Tái bút: Câu hỏi tương tự cho phần giá trị của bản đồ.

Câu trả lời:


168

Dùng cái này:

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

Đối với phần giá trị, nó thậm chí còn dễ dàng hơn, vì không có tự động "chuyển văn bản thành chuỗi" xảy ra:

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

11
Chỉ cần để cung cấp một tài liệu tham khảo: các tài liệu Bản đồ nói:To use the value of a String as the key value of a map, simply surround the variable with parenthesis.
mmigdol

1
@mmigdol trích dẫn này là từ tài liệu groovy cũ trong tài liệu hướng dẫn mới nhất của nó như thế này: 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

Vậy sự khác biệt giữa def map = [(A): 1, (X): 2] là gì. và def map = ["$ A": 1, (X): 2] nếu có?
TriMix

2
@TriMix sự khác biệt là Strings và GStrings. Với [(A):1, (X):2], biến đang được thoát thành một chuỗi. Với ["$A":1, (X):2], "$A"là một chuỗi nội suy dẫn đến một GString. Maps mong đợi các khóa là bất biến mà GString không cung cấp.
Josh Lyon

20

Ngoài câu trả lời của Joachim , nếu bạn muốn thêm các mục vào bản đồ hiện có và các khóa là các biến, hãy sử dụng:

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

Nếu bạn dùng:

map.A = 2

Giả sử rằng bạn muốn sử dụng chuỗi chữ 'A' làm khóa (mặc dù có một biến có tên là A trong phạm vi.

Cập nhật

Như @tim_yates đã chỉ ra trong một nhận xét, một biến chính cũng sẽ được giải quyết nếu bạn sử dụng:

map."$A" = 2

mặc dù cá nhân tôi thích sử dụng [A]cú pháp hơn vì các công cụ tái cấu trúc có thể bỏ lỡ "$A"tham chiếu nếu biến được đổi tên


6
các map."$A"cú pháp mang đến cho bạn những lợi ích của vô hướng đồ an toàn với map?."$A", mà AFAIK bạn không thể đạt được sử dụng map[A]cú pháp
Ghiro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.