Map 在Groovy中使用字符串访问映射映射的元素

Map 在Groovy中使用字符串访问映射映射的元素,map,groovy,Map,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中有更好的方法吗?一个方便的方法是使用哪个实

考虑到我有一张像这样的地图:

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

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
,而是
属性(来自
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
可以用上面这样的组合键进行索引

答案在任何方面都有用吗?如果是,其他人是否可以接受。应该注意的是,这似乎只有在值为字符串时才起作用;尝试使用HashMap的列表执行此操作,并且
toProperties()
方法将列表转换为包含HashMap的
toString()
版本的字符串。我不明白与使用
myMap['b.c']
相比,它有什么优势?