簡體   English   中英

在 Groovy 中使用字符串訪問地圖地圖的元素

[英]Accessing elements of a map of maps using a string in Groovy

鑒於我有一張地圖,如:

def myMap = [ b : [ c:"X" ] ]

還有一個字符串

def key = 'b.c'

我想查看使用密鑰獲取值“X”的選項。

我自己想出了兩種方法來實現這一點,但我對這些解決方案不太滿意:

 1) Eval.me("theMap", myMap, "theMap.$key")
 2) mayMap."$key.split('\\.')[0]"."$key.split('\\.')[1]"

有人在 Groovy 中有更好的方法來做到這一點嗎?

一種方便的方法是使用實​​現 Map 的ConfigObject

def myMap = [b:[c:'X', d: 'Y'], a:[n:[m:[x:'Y']]]] as ConfigObject
def props = myMap.toProperties()

assert props['b.c'] == 'X'
assert props.'b.c' == 'X'
assert props.'a.n.m.x' == 'Y'

優點:

  • 不再分裂。
  • 不再評價。

恕我直言,它不是ConfigObject ,它可以解決問題,它的Properties (來自ConfigObject.toProperties() )。 看看並嘗試:

def props = new ConfigSlurper().parse("""
b {
 c = 'X'
 d = 'Y'
}
a {
 n {
   m {
     x:'Y'
   }
 }
}""")

assert props['b.c'] == 'X'
assert props.'b.c' == 'X'
assert props.'a.n.m.x' == 'Y'
'passed'

斷言失敗:

assert props['b.c'] == 'X'
       |    |       |
       |    [:]     false
       [b:[c:X, d:Y], a:[n:[m:[:]]], b.c:[:]]

    at ConsoleScript7.run(ConsoleScript7:14)

我真的希望ConfigObject可以用像上面這樣的組合鍵進行索引

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM