鉴于我的地图如下:
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中执行此操作?
答案 0 :(得分:13)
一种方便的方法是使用实现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'
优点:
答案 1 :(得分:2)
恕我直言,它不是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
可以使用上面的组合键索引